javascript - 获取元素的 jQuery 选择器

标签 javascript jquery jquery-selectors

在伪代码中,这就是我想要的。

var selector = $(this).cssSelectorAsString(); // Made up method...
// selector is now something like: "html>body>ul>li>img[3]"
var element = $(selector);

原因是我需要将其传递给外部环境,其中字符串是我交换数据的唯一方式。这个外部环境然后需要发回一个结果,以及要更新的元素。所以我需要能够为页面上的每个元素序列化一个唯一的 CSS 选择器。

我注意到 jquery 有一个 selector 方法,但它似乎在这种情况下不起作用。它仅在对象是使用选择器创建时才有效。如果对象是使用 HTML 节点对象创建的,则它不起作用。

最佳答案

我现在看到有一个插件存在(我也想到了同名),但这里只是我编写的一些快速 JavaScript。它不考虑元素的 ID 或类——只考虑结构(并在节点名称不明确的地方添加 :eq(x))。

jQuery.fn.getPath = function () {
    if (this.length != 1) throw 'Requires one element.';

    var path, node = this;
    while (node.length) {
        var realNode = node[0], name = realNode.name;
        if (!name) break;
        name = name.toLowerCase();

        var parent = node.parent();

        var siblings = parent.children(name);
        if (siblings.length > 1) { 
            name += ':eq(' + siblings.index(realNode) + ')';
        }

        path = name + (path ? '>' + path : '');
        node = parent;
    }

    return path;
};

(许可证:麻省理工学院)

关于javascript - 获取元素的 jQuery 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2068272/

相关文章:

javascript - 该页面是通过 HTTPS 加载的,但请求了一个不安全的 XMLHttpRequest 端点

javascript - 以不同的方式打击机器人垃圾邮件

php - 通过单击“添加评论”按钮,它仅适用于第一篇文章。我该如何为该墙上的所有帖子执行此操作

jquery - scrollTo - jQuery 插件。滚动正常,但尝试向上滚动时出现锯齿状且 'stuck'

jquery-selectors - jQuery : How do I apply . 模糊到 div 的*每个*子元素,而不是 div 的*任何*子元素?

javascript - 简单的ajax无法工作,可能是语法错误

php - 将这段 Javascript 与另一部分结合起来?

javascript - 是否有一个库允许我在页面底部加载 jQuery 但仍然用 $(function() {}) 填充我的 html

php - 页面未加载到 IE11 的 iframe 中

javascript - jQuery li 元素按 ID 选择