Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.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 获取路径/";唯一选择器“;到HTML对象:为什么它不';不行?_Javascript_Html - Fatal编程技术网

Javascript 获取路径/";唯一选择器“;到HTML对象:为什么它不';不行?

Javascript 获取路径/";唯一选择器“;到HTML对象:为什么它不';不行?,javascript,html,Javascript,Html,我正在尝试获取用户选择的对象的路径。我做了一个代码,但它不能正常工作,我不知道为什么 这是: var selObj = window.getSelection().anchorNode; //chosen html object var currentCheck = selObj; //element which name is added to path var path = ""; //path to element while (currentCheck.tagName != "BODY"

我正在尝试获取用户选择的对象的路径。我做了一个代码,但它不能正常工作,我不知道为什么

这是:

var selObj = window.getSelection().anchorNode; //chosen html object
var currentCheck = selObj; //element which name is added to path
var path = ""; //path to element
while (currentCheck.tagName != "BODY") {
    currentCheck = currentCheck.parentNode;
    var addToPath = currentCheck.tagName.toLowerCase();

    //class
    if (currentCheck.className != "") {
        var divideClassNames = currentCheck.className.replace(/( {2,})/, '').replace(/ *$/, '').replace(/^ */, '').replace(/\ /g, '.');
        addToPath += "." + divideClassNames;
    }
    //id
    if (currentCheck.id != "") {
        addToPath += "#" + currentCheck.id;
    }

    //nthchild
    var i = 0;
    var child = currentCheck;
    while ((child = child.previousSibling) != null) {
        i++;
    }
    addToPath += ":nth-child(" + i + ")";

    if(path !== ""){
        path = addToPath + " > " + path;
    } else {
        path = addToPath;
    }

}
您可以复制它,在任何网站上突出显示某些文本,并在浏览器控制台中运行

我强调了其中的前几个词(“家养狗”),我得到的是:

body.mediawiki.ltr.sitedir-ltr.ns-0.ns subject.page Dog.skin vector.action视图:第n个孩子(2)>div.mw-body#content:n个孩子(5)>div.mw-body-content:n个孩子(9)>div.mw-content-ltr#mw内容文本:第n个孩子(7)>p:n个孩子(6)

使用:

$("body.mediawiki.ltr.sitedir-ltr.ns-0.ns-subject.page-Dog.skin-vector.action-view:nth-child(2) > div.mw-body#content:nth-child(5) > div.mw-body-content#bodyContent:nth-child(9) > div.mw-content-ltr#mw-content-text:nth-child(7) > p:nth-child(6)")
在浏览器中,控制台不返回任何元素(浏览器找不到)

在firefox中有一个选项“复制唯一选择器”。我在我想要得到的路径上使用了它,我得到的是:

#mw-content-text > p:nth-child(4)
如您所见,“第n个孩子”(我的脚本返回6,browser-4)有一些问题。我在其他网站上试过:到处都是关于N个孩子的问题


我应该更改什么以使其正常工作?

您的问题是文本节点

while ((child = child.previousSibling) != null) {
    if (child.nodeType != 3) {
      i++;
    }
}
在第n个子项的计数中添加一个文本节点,而不需要它。HTML中标记之间的所有空白在dom中创建一个文本节点


更多信息

您的问题是文本节点

while ((child = child.previousSibling) != null) {
    if (child.nodeType != 3) {
      i++;
    }
}
在第n个子项的计数中添加一个文本节点,而不需要它。HTML中标记之间的所有空白在dom中创建一个文本节点


更多信息

为什么需要获取路径?你想用它做什么?如果您只想找到被选中的元素,而不必担心其路径,那么可以使用onselect事件,请参见:我为问题添加了一个解决方案,但是惟一选择器是一个有趣的话题。如果目标是获取唯一的选择器,请记住可以在第一个ID中停止,因为这是唯一的。如果id不是唯一的,您就不能确定jquery是否会返回正确的id。如果使用:nth clid,也可以删除类元素,因为它是多余的。@31我想将用户高亮显示的文本保存在数据库中,并在用户再次访问此页面时高亮显示。我需要路径来保存所选数据的位置。@RaúlMartín您知道如何在不使用jQuery的情况下获取此路径描述的对象吗?当然可以。document.QuerySelect all为什么需要获取路径?你想用它做什么?如果您只想找到被选中的元素,而不必担心其路径,那么可以使用onselect事件,请参见:我为问题添加了一个解决方案,但是惟一选择器是一个有趣的话题。如果目标是获取唯一的选择器,请记住可以在第一个ID中停止,因为这是唯一的。如果id不是唯一的,您就不能确定jquery是否会返回正确的id。如果使用:nth clid,也可以删除类元素,因为它是多余的。@31我想将用户高亮显示的文本保存在数据库中,并在用户再次访问此页面时高亮显示。我需要路径来保存所选数据的位置。@RaúlMartín您知道如何在不使用jQuery的情况下获取此路径描述的对象吗?当然可以。document.QuerySelect all为什么需要获取路径?你想用它做什么?如果您只想找到被选中的元素,而不必担心其路径,那么可以使用onselect事件,请参见:我为问题添加了一个解决方案,但是惟一选择器是一个有趣的话题。如果目标是获取唯一的选择器,请记住可以在第一个ID中停止,因为这是唯一的。如果id不是唯一的,您就不能确定jquery是否会返回正确的id。如果使用:nth clid,也可以删除类元素,因为它是多余的。@31我想将用户高亮显示的文本保存在数据库中,并在用户再次访问此页面时高亮显示。我需要路径来保存所选数据的位置。@RaúlMartín您知道如何在不使用jQuery的情况下获取此路径描述的对象吗?请确定document.queryselectoral