这是我正在尝试做的事情:我有一个书签,正在寻找当前页面中的元素(可以是任何网站),并在匹配的事件上发送点击事件。我有那部分工作。
在某些情况下,没有任何内容会自动匹配,我希望能够显示(通过将其悬停)应激活哪个元素,然后在localStorage
中保存一些相关信息。下次我在该页面上使用书签时,我想检索该信息以识别DOM中的元素,然后发送点击事件。
问题是:我应该保存哪些信息才能识别它?(在大多数情况下,因为它总是可以创建一个不起作用的情况)
在最好的情况下,所述元素将具有id
值,我很高兴。在其他一些情况下,它不会,我希望看到你的建议,我应该用什么信息和方法来取回它。
到目前为止,我的想法是保存一些元素的属性并遍历DOM以查找匹配所有内容的元素。并非所有属性都有效(例如clientWidth
将取决于浏览器的大小)并且并非所有类型的元素都具有所有属性(例如,div
节点将不具有src
值),这意味着一方面,我不能盲目保存所有属性,但另一方面,我需要选择一个有限的属性列表,可以适用于任何类型的元素(有失去一些有用的风险)信息)或不同的情况下不同的元素(听起来不是很棒)。
我以为我可以使用的东西:
id
当然className
,tagName
会有所帮助,但在某些情况下className
可能不是明确匹配innerHTML
应该可以在很多情况下使用
如果内容是图片,src
应该适用于大多数情况所以,我的问题有点“你会怎么做?”,不一定是代码。 谢谢!
答案 0 :(得分:2)
你可以做@brendan说的话。你也可以为DOM中的每个元素组成一个jQuery样式的选择器字符串,通过根据它在父节点的子节点列表中的位置来计算元素的“索引”,然后通过将DOM向上移动来构建它。身体标签。
你最终会看到的是
body > :nth-child(3) > :nth-child(0) > :nth-child(4)
当然,如果DOM的变化不会那么好用。你可以添加类名等,但正如你所说的那样,如果你没有一个好的“id”开头,这样的东西本来就很脆弱,那就是在页面创建的时候通过任何逻辑知道应该是什么首先是页面。
答案 1 :(得分:1)
如何找到没有ID的所有元素并为它们分配唯一ID。然后你总是可以使用id。
答案 2 :(得分:1)
一种方法是使用name,tagName和className-combination。 innerHTML可能太大了。
另一种方法是查找具有id的选择元素的子元素。
检查id =>检查id =>的孩子检查name,tagName和className-combination(if =>告诉用户选择不同的项目: - )
答案 3 :(得分:0)
如何在DOM中使用元素的索引(整数)?您可以遍历页面加载中的每个元素并将自定义属性设置为索引...
var els = document.getElementsByTagName("*");
for(var i = 0, l = els.length; i < l; i++) {
els[i].customIndex = i;
}