JQuery изменить все элементы текста - PullRequest
4 голосов
/ 31 марта 2011

Мне нужен jquery для изменения чисел на всех страницах. например, я хочу изменить 1 на ۱, поэтому я попробовал так:

$("*").each(function(){
    $(this).html(  $(this).html().replace(1,"۱")  );
})

но это также изменит правила и атрибуты CSS. Есть ли уловка, чтобы избежать css и атрибутов?

Ответы [ 3 ]

9 голосов
/ 31 марта 2011

Это не та работа, в которую jQuery естественно вписывается. Вместо того чтобы заставить jQuery извлекать плоский список всех элементов, рекурсивно проходите по дереву DOM самостоятельно, ища текстовые узлы , чтобы выполнить замену.

function recursiveReplace(node) {
    if (node.nodeType == 3) { // text node
        node.nodeValue = node.nodeValue.replace("1", "۱");
    } else if (node.nodeType == 1) { // element
        $(node).contents().each(function () {
            recursiveReplace(this);
        });
    }
}

recursiveReplace(document.body);

Смотрите это в действии здесь .

2 голосов
/ 31 марта 2011

Попробуйте:

$("body *").each(function() { 
    if ( this.childElementCount > 0 ) { return; }
    $(this).text(function(i, v) { return v.replace('1','۱'); }); 
});

Обновление: не работает ...

1 голос
/ 31 марта 2011

Не видя реального примера вашего кода, трудно дать хороший ответ, но я сделаю все возможное.

Вот что я бы сделал.Я бы обернул все ваши номера страниц в тег с определенным идентификатором, как это ...

<span class="pageNumber">1</span>
...
<span class="pageNumber">n</span>

Тогда вот jQuery ...

$.each($("span.pageNumber"), function()) {
    $(this).text('value');
});

Вы можете увеличитьзначения в цикле для подсчета страниц или что-либо еще, что вы хотите!

Надеюсь, это поможет,
spryno724

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...