使用javascript使用HTML搜索确切的子节点
Search for the exact child node with HTML using javascript
getElementsByTagName("*")
将为您获取Depth First Search in Pre-order
中的子节点。问题是,如果我在节点的HTML中搜索字符串,就无法判断getElementsByTagName("*")
将返回的另一个子节点中是否存在相同的字符串。那么,有没有什么方法可以将节点从叶子迭代到根呢?最有可能的是DFS-Post order
可以做到这一点!
例如:
<div id=""master">
<div id="id1">
<div id="id2">
<span>text</span><i>more text</i>
</div>
</div>
</div>
如果我们正在搜索<i>more text</i>
,那么结果的第一个元素的innerHTML以及所有后续元素都将匹配。但我只想要一个完全匹配字符串的孩子。如果我们从树叶开始,那么我们可以在找到文本后break
离开。
还有其他想法吗?
如果必须实际执行此文本搜索,请确保nodeType === 3
,然后检查nodeValue
中的字符串。您实际想要返回的节点是所述节点的parentNode
。
不过,我认为一般来说这是个坏主意,如果你希望所述元素的内容发生变化(这就是你搜索它的原因),那么就附加一个事件处理程序来侦听变化。
这比您名义上需要的略多,但正是您想要的。
它允许您使用基于属性的许多条件来搜索节点,并给出所有匹配项的数组。
function getNodes(prop, needle, blnMatch, node){
var results=[], any=(needle==null);
node=node||document.documentElement;
if(node.splice){ node={childNodes:node}; }
for(var it, i=0, kids=node.childNodes;it=kids[i];i++){
if(it.childNodes.length){
results=results.concat(getNodes(prop, needle, blnMatch, it));
}
switch(true){
case any && it[prop]:
case it[prop]===needle:
case blnMatch && !!String(it[prop]).match(needle):
results[results.length]=it;
}
}
return results;
}//end getNodes()
//for your purpose, you can use it to reach the actual textNode as such:
var node=getNodes("data","more text")[0];
alert([node.data, node.nodeName]) // shows : "more text, #text"
请注意,您可以通过多种方式使用它来特定于任何给定的属性:
getNodes("nodeType", 3);
getNodes("nodeValue", "more text");
getNodes("nodeName", /^(a|link)$/i, true);
相关文章:
- 选择<李>使用普通JavaScript的子节点,而不是孙节点
- 仅使用某些子节点访问xml中父节点的子节点
- 难以获取使用属性选择的节点的子节点
- 使用Javascript设置带有子节点的父节点的类's文本等于.
- 使用jquery检索父节点的子节点
- 使用 JavaScript 从 XML 中删除子节点
- 使用 jQuery 解析 JSON 子节点
- 如何使用 JavaScript 遍历 XML 节点和子节点
- 使用XPath使用JavaScript在XML文件中的子节点上进行迭代
- 使用javascript使用HTML搜索确切的子节点
- 使用d3树映射可以在点击父节点到子节点时转到子节点
- 如何使用jquery删除树视图子节点
- 使用 jQuery 显示/隐藏子节点
- 使用Internet Explorer的子节点不工作
- 如何使用此选择器查找直接子节点
- 使用data-*来设置内部子节点的占位符
- 如何将事件传递给子节点元素而不使用
- 使用jquery遍历xml的子节点
- 如何使用" jstreet "附加json变量作为子节点Jquery插件-没有ajax
- D3树布局-强制子节点使用可用空间