Преобразовать все экземпляры определенного термина в нижний регистр?

0

У меня есть навигация со всеми элементами, заглавными с помощью text-transform:uppercase. Тем не менее, существует один термин (ISAtv), который я всегда хочу использовать с более низким уровнем. Этот термин появляется много раз во время навигации (подменю и т.д.), Поэтому вместо того, чтобы просто нацеливать этот элемент на CSS, мне было интересно, есть ли способ, которым я могу использовать какой-то код для одновременного изменения всех них.

Так, например, это выглядело бы примерно так:

ABOUT PAGE1 PAGE2 PAGE3 WATCH ISAtv CONTACT

Я хотел бы преобразовать все экземпляры "ISATV" в "ISAtv". Как я могу это сделать?

  • 2
    Использование javascript для создания текста строчными буквами мало помогает, когда стиль преобразования текста установлен в верхний регистр.
  • 0
    «ISAtv» не является строчной версией «ISATV».
Теги:

2 ответа

1
Лучший ответ

Принятый ответ все еще не решает проблему правильно. Здесь быстрая и грязная функция, которую я написал, которую вы можете использовать, которая находит все экземпляры строки и сохраняет ее регистр.

JS:

function retainCaseStrings(retainWord, caseInsensitive) {
    $('body *').contents().each(function() {
        if (this.nodeType === 3 && $.trim(this.data).length) {
            var trimmedWord = $.trim(this.data);
            var indexOfRetainedWord;
            if (caseInsensitive) {
               var lowerCaseRetainWord = retainWord.toLowerCase();
               indexOfRetainedWord = trimmedWord.toLowerCase().indexOf(lowerCaseRetainWord);
            } else {
               indexOfRetainedWord = trimmedWord.indexOf(retainWord);   
            }
            if (indexOfRetainedWord !== -1) {
                var $span = $(document.createElement('span')).addClass('retain-case').append(trimmedWord.slice(indexOfRetainedWord, retainWord.length));
                var requiredNodes = [
                    document.createTextNode(trimmedWord.slice(0, indexOfRetainedWord)),
                    $span[0],
                     document.createTextNode(trimmedWord.slice(indexOfRetainedWord + retainWord.length))

                ];
                var parentNode = this.parentNode;
                parentNode.replaceChild(requiredNodes[2], this);
                parentNode.insertBefore(requiredNodes[1], requiredNodes[2]);
                parentNode.insertBefore(requiredNodes[0], requiredNodes[1]);
            }
        }
    });
}

var retainWord = 'ISAtv';
retainCaseStrings(retainWord, true);

CSS:

.retain-case { text-transform: none; }
  • 0
    Что если на странице есть «ISAtv», написанные как «isatv», «IsAtV» или что-то подобное?
  • 0
    @Froient Я изменил вышеупомянутое для поддержки нечувствительных к регистру совпадений. Вы можете передать true как второй аргумент, чтобы использовать это.
0

Вы можете заменить текст ISATV правильным текстом, а также инкапсулировать его в span с классом, чтобы удалить text-transform.

http://jsfiddle.net/Q2wMH/

JS:

var strIsatv = /(ISATV)+/gi;
document.body.innerHTML = document.body.innerHTML.replace(strIsatv, '<span class="untransform">ISAtv</span>');

CSS:

.untransform { text-transform: none; }
  • 0
    Рассмотрим возможность того, что могут быть html-атрибуты, чьи имена или значения могут содержать строку «isatv».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню