0

我在这个网站上搜索了很多,得到了很多好的答案,这是我第一次需要问一个问题,因为我找不到答案。

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

这些页面是如此随意,我能做到的唯一方法是让用户双击该值以“训练”脚本并检测事件和被双击的元素。这很好用,我可以检索我想要的值,并且我有一个元素的 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
});

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

我以为我在这里找到了一些相关的东西:获取当前的 jQuery 选择器字符串?但它在这里不起作用(证明在小提琴中,我明白了为什么)。

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

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

4

2 回答 2

0

为什么不设置cookie?如果您只在页面加载后检索文本,或者如果文本在服务器上可用,那么服务器是否设置了cookie

于 2013-05-20T18:26:07.767 回答
0

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

getPath 给出了一个字符串,可以保存以供将来参考,例如

html>body>div>p:eq(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 结构在使用之间保持不变,但对于我的应用程序来说这不是问题。

于 2013-05-21T08:37:12.083 回答