搜索具有特定属性集的非嵌套节点
Search for non-nested nodes with specific attribute set
简而言之,我正在用javascript开发一个小库,它将取代<div src="somesite"><div>,其中包含来自指定源的内容。这将允许程序员创建动态页面,而不必在服务器端做更多的工作,而不需要使用iframe。
我需要的是一种有效的方法来获得具有src属性的分支中最顶端的div节点。E.G:
<div src="somesite/pagelet.htm" id="div1">
<div src="somesite/fallback.htm" id="div2"></div>
</div>
<div src="somesite/pagelet2.htm" id="div3"></div>
我想检索#div1和#div3,稍后再忽略#div2。目前我正在使用以下功能,但我想知道是否有更有效的方法:
function getRootElementsByAttribute(rootEle, tag, attr) {
try {
tag = tag.toLowerCase();
if (rootEle.tagName.toLowerCase() === tag && rootEle.hasAttribute(attr)) {
return [rooEle]
}
var eles = rootEle.getElementsByTagName(tag),
nodes = [], ele, isRoot, eleParent, a;
for (a=0; a<eles.length; a++) {
ele = eles[a];
if (ele.hasAttrinute(attr)) {
isRoot = true;
eleParent = ele;
while ((eleParent = eleParent.parentNode)) {
if (eleParent.tagName.toLowerCase() === 'div' && eleParent.hasAttribute(attr)) {
isRoot = false;
break;
}
}
if (isRoot == true) nodes.push(ele)
}
}
}catch(e){}
return nodes;
}
请不要回答建议使用图书馆的问题。导入一个完整的库似乎有些过头了,因为它只用于这个单一的函数
您可以尝试使用XPath表达式来获取具有属性源的所有根div,方法如下XPath表达式:
/div[@src]
/div选择根级别上的所有div。对于文档中的所有div,请使用//div。[@src]指定只需要具有"src"属性的节点。
var xmlDoc = //load your document here
var xpath = "/div[@src]"
var nodes = xmlDoc.evaluate(xpath, xmlDoc, null, XPathResult.ANY_TYPE,null);
相关文章:
- 嵌套的promise节点js
- 获取不带Jquery的嵌套父HREF节点
- 节点.js中的嵌套异步操作
- 搜索具有特定属性集的非嵌套节点
- 通过对象的嵌套集合进行递归总是在第一个叶节点处终止
- 访问角度方向中的嵌套节点
- 在 d3.js 中创建嵌套的 SVG 节点
- 从节点模块内部返回嵌套函数
- 节点 JS 在嵌套函数中返回
- 从节点中的多个嵌套回调中返回值
- 查找嵌套 xml 节点的更简单方法
- 在查询字符串 - 节点.js中发布嵌套对象
- 节点嵌套的 HTTPS 请求
- 如何在 React/Javascript 中的不可变树中存储指向嵌套节点的“指针”
- 嵌套节点async.eachSeries
- 查找使用多个字符串值的JSON嵌套节点
- 当嵌套节点为value时,获取上层节点的innerHTML
- 递归地删除javascript中的所有嵌套节点
- 使用jQuery创建更深的嵌套节点和属性时,哪种方法性能更好
- 如何在xml中获得所有的第一级嵌套节点