为什么addBack与Find()一起使用

时间:2014-02-21 01:48:12

标签: jquery

我试图理解这段代码的作用以及为什么我们在没有使用addBack()的情况下获得相同的结果时使用了find()的addBack()

采取这两个例子

$("body div").find("*").addBack().contents().filter(function(){
    return this.nodeType === 3 && /shaolin/i.test(this.nodeValue);
})

VS

$("#myDiv").find("*").addBack().contents().filter(function(){
    return this.nodeType === 3 && /judo/i.test(this.nodeValue);
})

另外我们为什么要做/shaolin/i.test(this.nodeValue);?

2 个答案:

答案 0 :(得分:4)

find()仅返回与选择器匹配的后代。该代码使用addBack,以便除了所有后代之外,还会搜索原始body div元素的内容。

如果顶级DIV元素都没有与过滤函数匹配,则无论是否有addBack,结果都是相同的。代码试图彻底,所以它不会错过任何东西。

代码正在查找body div中包含单词shaolin的所有文本节点。 /shaolin是一个正则表达式,它会针对此测试每个文本节点的值。

答案 1 :(得分:1)

来自docs

  

.addBack()将堆栈上的前一组元素添加到   当前集合,可选择由选择器过滤。

在您的情况下,addBack()div内的任何body添加到当前集合中,该集合是任何div子项的元素。

因此,它不仅可以找到放置在div下的元素的内容,还可以找到div内容本身。