Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 标识不带类或ID的HTML元素的路径_Javascript - Fatal编程技术网

Javascript 标识不带类或ID的HTML元素的路径

Javascript 标识不带类或ID的HTML元素的路径,javascript,Javascript,因此,在我的代码中,当您单击某个元素时,它将提示标记的名称 我真正想做的是找到路径,这样我可以稍后再次引用该元素 例如,如果我点击文本“世界”,我会得到 分区(2)>UL>LI(2) 我不想在jQuery中这样做,只是简单的老生常谈。 document.addEventListener(“单击”,eOnClick,true); 功能单击(e){ 警报(e.target.tagName); } div{ 边框:1px纯红; } 保险商实验室{ 边框:1px纯绿色; } 李{ 边框:1px纯蓝色;

因此,在我的代码中,当您单击某个元素时,它将提示标记的名称

我真正想做的是找到路径,这样我可以稍后再次引用该元素

例如,如果我点击文本“世界”,我会得到

分区(2)>UL>LI(2)

我不想在jQuery中这样做,只是简单的老生常谈。
document.addEventListener(“单击”,eOnClick,true);
功能单击(e){
警报(e.target.tagName);
}
div{
边框:1px纯红;
}
保险商实验室{
边框:1px纯绿色;
}
李{
边框:1px纯蓝色;
}

  • 你好
  • 世界

如果我理解正确,这就是您需要做的:

更新
document.addEventListener(“单击”,eOnClick,true);
功能单击(e){
var目标=e.target;
var指数=计算指数(目标)
var path=target.tagName+“[”+索引+“]”;
while(target.parentNode)
{
target=target.parentNode;
if(target.parentNode!=未定义){
索引=计算索引(目标)
path=target.tagName+“[”+索引+“]”+“>”+路径;
}
}
警报(路径);
}
函数计算索引(元素){
var ix=0;
var sides=element.parentNode.childNodes;

对于(var i=0;i,如果我正确理解了你,这就是你需要做的:

更新
document.addEventListener(“单击”,eOnClick,true);
功能单击(e){
var目标=e.target;
var指数=计算指数(目标)
var path=target.tagName+“[”+索引+“]”;
while(target.parentNode)
{
target=target.parentNode;
if(target.parentNode!=未定义){
索引=计算索引(目标)
path=target.tagName+“[”+索引+“]”+“>”+路径;
}
}
警报(路径);
}
函数计算索引(元素){
var ix=0;
var sides=element.parentNode.childNodes;
对于(var i=0;i
var html=“
  • 1
  • 2
  • 3
    • 1
    • 2
    • 3
      • 2
      • 3
        • 1
        • 2
        • 3
        • ”; document.body.innerHTML+=html; 函数nodelistToArray(nodelist){ 返回Array.prototype.slice.call(nodelist); } 功能遍历(目标、链){ 如果(链===void 0){ 链=[]; } var index=NodeListArray(target.parentNode.children.filter)(函数(a){ 返回a.nodeName==target.nodeName; }).indexOf(目标公司); 推链({ 要素:目标, 索引:索引 }); if(target.nodeName.toLowerCase()=“html”){ 返回链。反向(); }否则{ 返回遍历(target.parentNode,chain); } } document.body.onclick=函数(evt){ var链=导线(evt.目标); 控制台日志(链); 警报(chain.map)(函数(elm){ 返回elm.element.nodeName+'['+(elm.index.toString()+']; })。加入(“>”); };
var html=“
  • 1
  • 2
  • 3
    • 1
    • 2
    • 3
      • 2
      • 3
        • 1
        • 2
        • 3
        • ”; document.body.innerHTML+=html; 函数nodelistToArray(nodelist){ 返回Array.prototype.slice.call(nodelist); } 功能遍历(目标、链){ 如果(链===void 0){ 链=[]; } var index=NodeListArray(target.parentNode.children.filter)(函数(a){ 返回a.nodeName==target.nodeName; }).indexOf(目标公司); 推链({ 要素:目标, 索引:索引 }); if(target.nodeName.toLowerCase()=“html”){ 返回链。反向(); }否则{ 返回遍历(target.parentNode,chain); } } document.body.onclick=函数(evt){ var链=导线(evt.目标); 控制台日志(链); 警报(chain.map)(函数(elm){ 返回elm.element.nodeName+'['+(elm.index.toString()+']; })。加入(“>”);
          };
使用以下复杂解决方案:

document.addEventListener(“单击”,eOnClick,true);
功能单击(e){
var el=e.target,
路径=[],
标记名=”,
最近的=e.target.parentNode;
而(el.parentNode&&el.parentNode!==文档){
tagName=el.parentNode.tagName,last=path[path.length-1];
//如果是最近的父节点-分析同级节点
if(最近的===el.parentNode){
对于(变量i=0,childs=closest.childNodes,len=childs.length,c=1;i1)path.push(el.tagName+c);
}
如果(!last | |(last!==标记名和&last.indexOf(标记名)!==0)){
path.push(标记名);
}否则{
var num=last.match(/\d+$/);
最后一个=标记名+((num)?数字(num)+1:2;
路径[path.length-1]=最后一个;
}
el=el.parentNode;
}
path=path.reverse().map(函数(v){返回v.replace(/(\d+)$/,“($1)”;});
警报(路径);
}
div{
边框:1px纯红;
}
保险商实验室{
边框:1px纯绿色;
}
李{
边框:1px纯蓝色;
}

  • 你好
  • 世界

使用以下复杂解决方案:

document.addEventListener(“单击”,eOnClick,true);
功能单击(e){
var el=e.target,
路径=[],
标记名=”,
最近的=e.target.parentNode;
而(el.parentNode&&el.parentNode!==文档){
tagName=el.parentNode.tagName,last=path[path.length-1];
//如果是最近的父节点-分析同级节点
if(最近的===el.parentNode){
对于(变量i=0,childs=closest.childNodes,len=childs.length,c=1;i1)path.push(el.tagName+c);
}
如果(!last | |(last!==标记名和&last.indexOf(标记名)!==0)){
path.push(标记名);
}否则{
var num=last.match(/\d+$/);
最后一个=标记名+((n