脚本返回页面上不存在的元素
Script returns element that not exists on page
我有这个函数,它返回我el
的路径。但是,有时此函数会添加页面上不存在的元素。在这种情况下:
<table>
<tr><td></td><tr>
</table>
通往TD的路径看起来像table > tbody > tr > td
。这个函数有什么问题?
function getDomPath(el) {
element = el;
if (!(el instanceof Element)) return;
var path = [];
while (el.nodeType === Node.ELEMENT_NODE && el.id != "jobs") {
var selector = el.nodeName.toLowerCase();
if (el.id) {
selector += '#' + el.id;
}
else if(el.className){
console.log(el.className);
selector += '.' + el.className;
}
else {
var sib = el, nth = 1, count = 1;
while (sib.nodeType === Node.ELEMENT_NODE && (sib = sib.previousSibling) && nth++){
console.log(Node.ELEMENT_NODE)
console.log(el.previousSibling);
console.log(el);
count += $(el).prevAll().size();
};
selector += ":nth-child("+count+")";
}
path.unshift(selector);
el = el.parentNode;
}
return path.join(" > ");
};
如果问题是tbody
元素,你需要知道添加它的不是你的函数,而是浏览器本身。使用 Firebug 或 chrome 中的 Web Developer 工具查看您的页面。
看看这个SO答案。
该函数没有问题,它正确使用了所有确实存在的元素。
如果 table
元素有任何行,则始终具有 tbody
元素。浏览器会添加 tbody
元素,即使您在标记中没有任何标记。
浏览器将创建完整的元素,即使您的标记不完整或遗漏了可选标记。例如,浏览器将在表中创建两行,因为您在尝试结束第一行时使用了<td>
而不是</td>
。它将隐式结束第一行,开始新行,并隐式结束第一行。表中的元素最终将像将标记编写为:
<table>
<tbody>
<tr>
<td></td>
</tr>
<tr>
</tr>
</tbody>
</table>
相关文章:
- 如何将一个函数附加到一个不存在的元素上
- 使用js/jQuery检查对象(而不是元素)是否真的存在
- 使用webdriver和selenium验证元素是否不存在
- 试图把注意力集中在一个不重要的元素上是不是一种糟糕的做法;不存在
- 打字稿错误:P roperty'包含'在类型'元素'上不存在
- 原型JavaScript Event.observe-如何观察可能存在或不存在的元素
- AngularJS NgIf 或 NgHide 如果另一个元素不存在或隐藏
- 输出表示img元素不存在(为null),但脚本在img的实现下面,并使用了onload()
- jQuery 获取搜索选择器,如果元素不存在
- 如何在量角器中为元素存在或不存在创建条件
- 脚本返回页面上不存在的元素
- 为什么当我刚刚创建 DOM 元素时它不存在
- JavaScript 检查特定元素 (iframe) 是否存在,如果不存在,则检查 appendchild
- 诉诸数组中不存在的元素,会大大降低性能
- 使用 on() 将事件处理程序添加到尚不存在的元素
- Javascript 如果元素不存在返回,则导致对象不起作用
- 如果事件附加到不存在的元素,是否可以触发该事件
- 一次在同一节点上添加 2 个元素?(或在不存在的节点中)
- 查找绑定在不存在元素上的事件
- jQuery id选择器不返回不存在元素的空数组