简单的dom inspector脚本错误地计数了子节点

Avdept

我有一个简单的js函数,可将我的dom路径返回给clicked元素。但是有时某些元素(通常是我点击过的元素)计数两次

所以如果我有以下代码

<ul>
<li><a href ='#'>Some link</a></li>
</ul>

输出可能像ul:nth-child(1) > li:nth-child(1) > a:nth-child(2)whilea应该是1个孩子。

这是功能代码

var getDomPath;

getDomPath = function(el) {
  var count, element, nth, path, selector, sib;
  element = el;
  if (!(el instanceof Element)) {
    return;
  }
  path = [];
  while (el.nodeType === Node.ELEMENT_NODE && el.id !== "jobs") {
    selector = el.nodeName.toLowerCase();
    if (el.id) {
      selector += "#" + el.id;
    } else if (el.className) {
      selector += "." + el.className;
    } else {
      sib = el;
      nth = 1;
      count = 1;
      while (sib.nodeType === Node.ELEMENT_NODE && (sib = sib.previousSibling) && $(el).prev().prop('tagName') !== "STYLE" && $(el).prev().prop('tagName') !== null) {

        count += $(el).prevAll().size();
      }
      selector += ":nth-child(" + count + ")";
    }
    path.unshift(selector);
    el = el.parentNode;
  }
  return path.join(" > ");
};

代码已从咖啡转换为javascript,因此可能看起来有点糟

这是html,即时通讯试图获取路径

<td width="50%"><strong>Leveringssadresse</strong>
<br>
Hans Andersen
<br>
Andevej 123
<br>
1234 Andeby
<br>
Denmark
<br>
Telefon: 31122345
<br>
Mobiltelefon: 12232345
<br>
<a href="mailto:[email protected]">[email protected]</a>
<br>
</td>

在这里,当我单击aelement时,我希望它是nth-child(8),但是不知何故,我得到了17(在我的代码中,以1递增16 + 1)

寂寞的一天

问题在于此行:

while (sib.nodeType === Node.ELEMENT_NODE && (sib = sib.previousSibling) && $(el).prev().prop('tagName') !== "STYLE" && $(el).prev().prop('tagName') !== null) {

我已多次阅读此行,但无法弄清您要做什么。

您的代码说:

  • 确保当前检查的节点是一个元素
  • 将当前检查的节点设置为其先前的同级
  • 检查原始节点之前的元素的标签名称是否不是 STYLE

我不知道该步骤的顺序是什么,但是如果最终条件通过,它将计算n * (x + 1) + 1,其中n是先前元素同级x的数量,而是没有中间文本节点的紧接先前元素同级的数量。

下一行是这样的:

count += $(el).prevAll().size();

当然,这只应该运行一次,而完全没有条件。

count = $(el).prevAll().length + 1;

jsFiddle与工作代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

简单的dom inspector脚本错误地计数了子节点

来自分类Dev

刮擦HTML并使用简单HTML DOM计数孩子

来自分类Dev

PHP简单HTML Dom仅选择内部文本而不是子内部文本

来自分类Dev

ReactJS-脚本DOM节点

来自分类Dev

提取div类简单dom

来自分类Dev

简单的HTML Dom和CURL错误

来自分类Dev

PHP简单HTML DOM解析

来自分类Dev

DOM XML子节点

来自分类Dev

如何使简单形式更像React?(DOM节点丢失)

来自分类Dev

PHP-简单的HTML DOM解析器-当HTML正常时,出现致命错误

来自分类Dev

简单解释html DOM树>子节点概念

来自分类Dev

Python简单计数脚本

来自分类Dev

通过Interop添加一个简单的DOM操作JS脚本

来自分类Dev

简单的HTML DOM解析器错误

来自分类Dev

刮擦HTML并使用简单HTML DOM计数孩子

来自分类Dev

简单HTML DOM返回NULL

来自分类Dev

使用简单的HTML Dom PHP

来自分类Dev

简单的HTML dom 404错误

来自分类Dev

ReactJS-脚本DOM节点

来自分类Dev

简单的DOM HTML返回错误的URL

来自分类Dev

使用简单的DOM解析图像

来自分类Dev

简单的JavaScript DOM操作

来自分类Dev

Javascript简单地延迟计数

来自分类Dev

PHP简单HTML dom解析器,带有数组链接-file_get_contents错误

来自分类Dev

Javascript DOM错误创建节点

来自分类Dev

如何使简单形式更像React?(DOM节点丢失)

来自分类Dev

简单地执行更快的“点击目标”或“ DOM匹配”

来自分类Dev

XML DOM中缺少节点-简单示例

来自分类Dev

简单的 html dom,抓取错误注意:尝试在第 60 行的 C:\xampp\htdocs\scraper\au_div_puller.php 中获取非对象的属性