【发布时间】:2012-04-25 09:56:25
【问题描述】:
我想获取 HTML 页面中包含以某事物开头的属性的所有元素/节点(同样,属性名称以某事物开头,而不是它们的值!)。例如,TinyMCE 倾向于将自定义属性添加到它保存的元素中,例如"mce_style"、"mce_href"、"mce_bogus" 等。我想要属性值的 CSS3 选择器之类的东西,[attr^="mce_"], 但不适用于值、属性名称。
当然,我可以遍历所有 DOM 节点及其属性,并一一检查,但我想知道是否有更有效的方法。
请不要给我 TinyMCE 特定的答案,我很确定有一个标志会阻止 TinyMCE 保存这些属性,但问题是通用的。
【问题讨论】:
-
我觉得您要么必须遍历每个元素,并查看每个属性。即使
document.querySelectorAll()也没有attribute-name-begins-with选项。有趣的问题。 -
我对 TinyMCE 一无所知,但如果有某种方法可以识别具有 any 此类属性的元素,那么您至少可以先将搜索范围缩小到一个子集,然后查看子集的每个属性,这将比查看整个 dom 快得多。也就是说,是否有一些属性将始终添加到您的目标之一?如果是这样,请先查找。
-
@jamietre 是的,就 TinyMCE 而言,您可以假设例如
mce_href将始终应用于a元素,因此您可以缩小搜索范围。但正如我在上一句中所说,我不是在寻找特定于 TinyMCE 的答案,我宁愿有一个通用的解决方案,从我目前得到的答案来看,除了遍历所有元素之外别无他法他们的属性。皮蒂。 -
嗯,是的,但它确实引出了为什么的问题?我的意思是,是否有任何广泛使用的工具会让您陷入这种情况?没有理由编写代码来创建任意命名的元素,而没有其他方法可以识别节点。这有点像问,如何在不使用全文索引的情况下找到数据库中包含一些文本的每条记录?你没有。您使用全文索引。
-
HTML 中的自定义(和无效)属性已被(ab)永久使用,但此链接显示了在 HTML 5 中的有效使用以及具有快速和通用机制来检索这些属性的要点: ejohn.org/blog/html-5-data-attributes 如果你用谷歌搜索“自定义 html 属性”,我相信你会发现更多案例。
标签: javascript dom selector