7

我一直在寻找这个问题的答案,我想出了这个

stackoverflow - 如何使用 jQuery 选择文本节点?

到目前为止还有另一种方法吗?就我而言,我试图从给定的 DOM 元素开始查找每个文本节点,并且

empty()

它。有什么建议么 ?

更新 - 经过一番混乱后,我想出了这个 jsFiddle

现在该函数选择每个文本节点,但不是只用给定的新值替换空节点,而是替换所有文本节点。我究竟做错了什么 ??

4

5 回答 5

2

参考这个'现在该函数选择每个文本节点,但不是只用给定的新值替换空节点,而是替换所有节点。我究竟做错了什么 ??'

需要的是,只需使用正则表达式测试 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
           }
       });
    });
});

希望这能解决问题

于 2013-12-05T06:45:45.243 回答
1

这个演示怎么样http://jsfiddle.net/RajB4/42/

if( this.nodeType === 3 && this.nodeValue.trim().length != 0){
                this.nodeValue = 'new value';
            }
于 2013-12-06T06:24:21.883 回答
1
$(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/

于 2013-12-03T18:53:18.143 回答
1

empty()用于清空innerText元素,不适用于 textNodes。相反,您需要使用remove()

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

示例小提琴

于 2013-09-09T08:53:52.490 回答
0

据我了解,我认为这就是您要寻找的:

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

你可以检查小提琴

于 2013-12-10T10:44:24.930 回答