jQuery выберите текстовые узлы и удалите их содержимое

Я искал ответ на этот вопрос, и я придумал это

stackoverflow-Как выбрать текстовые узлы с помощью jQuery?

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

empty()

его. Есть предложения ?

UPDATE-после небольшого беспорядка я придумал это jsFiddle

функции выбирает каждый текстовый узел, но вместо того, чтобы заменять только пустые с новым значением, он заменяет их все. Что я делаю не так ??

5 ответов


Как я понял, я думаю, что это то, что вы ищете:

$('.example').each(function(){
    console.log($(this).contents());
    $(this).contents().filter(function(){
        if( this.nodeType === 1 && this.childElementCount == 0 && this.textContent == ''){
            this.textContent = 'new value';
        }
    });
});

вы можете проверить скрипка


со ссылкой на это " теперь функция выбирает каждый текстовый узел, но вместо того, чтобы заменять только пустые с новым заданным значением, она заменяет их все. Что я делаю не так ??'

требуется, чтобы просто проверить nodeValue для пробелов с помощью регулярного выражения, а затем на основе этого продолжить вперед.

я обновил его, как это, и это работает штраф в размере http://jsfiddle.net/Vj5LR/2/

$(document).ready(function(){

   var prova = ['1','2','3','4','5','6'];
   var regForNonWhiteSpace = /\S/; // non white space
   $('.example').find('*').each(function(){
       $(this).contents().filter(function(){
           //this.trim();
           if( this.nodeType === 3 && !regForNonWhiteSpace.test(this.nodeValue)){
               this.nodeValue = 'new value'; // only when there is no content at all
           }
       });
    });
});

надеюсь, это решит проблема


empty() используется для очистки innerText элемента и не применяется к textNodes. Вместо этого вам нужно использовать remove():

$('.example')
    .contents()
    .filter(function () {
    return this.nodeType === 3; //Node.TEXT_NODE
}).remove();

скрипка


$(document).ready(function(){

    var prova = ['1','2','3','4','5','6'];

    $('.example').find('*').each(function(){
        $(this).contents().filter(function(){
            //this.trim();
            if( this.nodeType === 3 && this.nodeValue.trim().length === 0){
                this.nodeValue = 'new value';
            }
        });
    });
});

http://jsfiddle.net/trevordowdle/RajB4/40/


Как насчет этой демонстрации http://jsfiddle.net/RajB4/42/

if( this.nodeType === 3 && this.nodeValue.trim().length != 0){
                this.nodeValue = 'new value';
            }