我试图理解这段代码的作用以及为什么我们在没有使用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);?
答案 0 :(得分:4)
find()
仅返回与选择器匹配的后代。该代码使用addBack
,以便除了所有后代之外,还会搜索原始body div
元素的内容。
如果顶级DIV
元素都没有与过滤函数匹配,则无论是否有addBack
,结果都是相同的。代码试图彻底,所以它不会错过任何东西。
代码正在查找body div
中包含单词shaolin
的所有文本节点。 /shaolin
是一个正则表达式,它会针对此测试每个文本节点的值。
答案 1 :(得分:1)
来自docs:
.addBack()将堆栈上的前一组元素添加到 当前集合,可选择由选择器过滤。
在您的情况下,addBack()
将div
内的任何body
添加到当前集合中,该集合是任何div
子项的元素。
因此,它不仅可以找到放置在div
下的元素的内容,还可以找到div
内容本身。