如何使用xpath计算父元素的子元素的深度
How can I count the depth of a child element from a parent using xpath?
使用Selenium,我可以找到子元素和父元素。如何从指定的父对象中获取子对象的深度?
这是HTML 的一个小样本
<div class="header">
<div></div>
<div></div>
<div>
<ul>
<li>
<img />
</li>
</ul>
</div>
<div></div>
<div></div>
</div>
这是我用来查找img标记的父级的xpath。
document.evaluate('../ancestor::div[contains(concat(" ", normalize-space(@class), " "), " header ")]', $('img')[0], null, XPathResult.ANY_UNORDERED_NODE_TYPE, null)
因此,我现在使用xpath来计算父级和子级之间的元素数量。我知道xpath中的count方法,但我对如何实现这一点缺乏经验。结果应该是父级与标记相距5级。
我支持@benjamid的回答,即直接在XPath中执行此操作可能有点困难。但我们可以使用一个小技巧:您要查找的深度可以计算为img
标记到根标记的深度与父标记到根标签的深度之间的差。试试这个:
count(ancestor::*) - count(ancestor::div[contains(concat(' ', normalize-space(@class), ' '), ' header ')][1]/ancestor::*)
如果您热衷于用jQuery在javascript中实现这一点,则应该使用以下函数:
function getDistanceFromElement(src){
return getDistance(src, 10, 1);
}
function getDistance(src, maxDepth, distance){
if(maxDepth > 0) {
var parent = $(src).parent();
if($(parent).hasClass("header")) {
return distance + 1;
} else {
return getDistance(parent, maxDepth - 1, distance + 1);
}
} else {
return;
}
}
使用以下HTML
<div class="header">
<div></div>
<div></div>
<div>
<ul>
<li>
<img id="my_image"/>
</li>
</ul>
</div>
<div></div>
<div></div>
</div>
,以下呼叫将显示5:
$(document).ready(function() {
var srcImage = $("#my_image");
var d = getDistanceFromElement(srcImage);
alert(d);
});
比benjamin.d的方法简单一点$("#my_image").parentsUntil("div[class='header']").length + 1;
注意,+ 1
也用于对<div class="header">
进行计数。如果没有它,此函数将返回位于检查元素之间的元素数。
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- jQuery:影响相同深度的列表元素
- 返回所有DOM元素的数组,按深度排序
- 如何使用xpath计算父元素的子元素的深度
- 带有jQuery的DOM元素的非深度拷贝
- DOM 中元素之间的“距离”(生成深度等)
- 如何使用 JQuery 在任何深度上查找具有类的元素
- 在 JavaScript 中寻找具有特定深度的元素
- 如何在html中设置固定位置元素的最大深度
- 通过深度索引访问数组元素
- Javascript从所有深度获取dom元素子元素
- 分配元素的深度
- JQuery计算节点深度差2个元素
- 为什么两个具有深度相等元素的数组的深度相等结果为false ?
- 使用Rivets.js和Backbone深度模型绑定和访问嵌套元素
- 通过jQuery删除一个HTML元素,这取决于它的深度