存储并调用[jquery]选择器

时间:2013-05-20 18:20:14

标签: jquery dom dom-traversal

我经常搜索这个网站并得到了很多好的答案,这是我第一次提出问题,因为我找不到答案。

我的脚本被注入用户加载的页面中,因此这些页面可以是完全任意的结构。页面上总会有一些特殊文本,我希望下次访问该页面时能够自动检索它(这是一个实时值,所以我有点抓取这个值)。

这些页面是如此随意,我能做到的唯一方法就是让用户双击值来“训练”脚本并检测事件和双击的元素。这工作正常,我可以检索我想要的值,我有一个元素的jQuery对象。

我无法弄清楚的是如何存储该元素(或者更确切地说是它的选择器),这样我就可以在下次访问页面时检索数据而无需双击它。

这是一个jsFiddle http://jsfiddle.net/troywray/YvSH9/,如果你双击红色文字,我很容易检索到我想要的文字。但是我可以存储什么以便以后能够重现选择器呢?

$('body').bind("dblclick", function(event){
    var dblClickElement = $(event.target);
    var specialText = dblClickElement.html();
    alert("I picked up: " + specialText);
    console.log(dblClickElement);
    console.log("selector result:", $(dblClickElement).selector); // empty string
});

Console说dblClickElement是一个对象[span.abcde],但它是firebug中的一个可点击对象。我想要的是字符串'span.abcde'所以我将来可以用它来选择。似乎没有jquery对象的属性等于span.abcde

我以为我在这里发现了一些相关内容:Get the current jQuery selector string?但它在这里不起作用(证明是小提琴,我明白了)。

我真的不想要解析内部/外部html来构建选择器字符串的建议 - 如果我必须这样做,那么毫无疑问我可以解决这个问题。

另外,我确实意识到在很多情况下选择器可能不会给我一个唯一的元素,但我可以处理它。

2 个答案:

答案 0 :(得分:0)

为什么不设置cookie?如果你只是在加载页面后检索文本,或者如果文本在服务器上可用,让服务器设置cookie,那么http://www.electrictoolbox.com/jquery-cookies/有一个jquery插件吗?

答案 1 :(得分:0)

答案是使用@Stephan指出的链接中的top voteed getPath函数。请注意,引用了另一个不适用于模糊节点的getPath函数。

getPath提供了一个可以保存以供将来参考的字符串,例如。

HTML>身体GT; DIV指p:当量(2)> span.abcde

用于从我使用的存储路径(未优化)中查找将来的元素:

var bits = path.split(">");
var currentElement = null;
for (var k = 0; k < bits.length; k += 1) {
    if (k === 0) {
        currentElement = $(bits[k]);
    } else {
        currentElement = currentElement.children(bits[k]);
    }
}
var desiredText = currentElement.html();

正如@fnostro所指出的,这取决于DOM结构在使用之间保持不变,但对于我的应用程序来说这不是问题。