我想在dom中找到所有出现的$字符,这是怎么做到的?
答案 0 :(得分:4)
你不能在span元素中执行像$ 4.00这样的语义操作吗?
<span class="money">$4.00</span>
然后你会发现属于'money'类的元素并且很容易操纵它们。你可以更进一步......
<span class="money">$<span class="number">4.00</span></span>
我不喜欢成为一个jQuery插件......但如果你这样做,jQuery可能就是你要走的路。
答案 1 :(得分:1)
一种方法,尽管可能不是最好的,但是走DOM来找到所有文本节点。这样的事情就足够了:
var elements = document.getElementsByTagName("*");
var i, j, nodes;
for (i = 0; i < elements.length; i++) {
nodes = elements[i].childNodes;
for (j = 0; j < nodes.length; j++) {
if (nodes[j].nodeType !== 3) { // Node.TEXT_NODE
continue;
}
// regexp search or similar here
}
}
尽管如此,只有当$
字符始终与其后面的数量位于同一文本节点中时,这才有效。
答案 2 :(得分:1)
您可以在body标签的innerHTML上使用正则表达式搜索:
例如 - 在此页面上:
var body = document.getElementsByTagName('body')[0];
var dollars = body.innerHTML.match(/\$[0-9]+\.?[0-9]*/g)
结果(在我发布时):
["$4.00", "$4.00", "$4.00"]
答案 3 :(得分:1)
如果您只需要一堆字符串并且不需要对包含$
的节点的引用,那么最简单的方法是在正文的文本内容上使用正则表达式。请注意,innerText
和textContent
并不完全相同。可能影响此处的主要差异是textContent
包含<script>
元素的内容,而innerText
则不包含var b = document.body, bodyText = b.textContent || b.innerText || "";
var matches = bodyText.match(/\$[\d.]*/g);
元素的内容。如果这很重要,我建议改为遍历DOM。
{{1}}
答案 4 :(得分:-1)
我想加2美分原型。 Prototype有一些非常简单的DOM遍历函数,可能正是你想要的。
编辑所以这是一个更好的答案
decendants()
函数收集所有子项及其子项,并允许在使用each()
函数时枚举它们
$('body').descendants().each(function(item){
if(item.innerHTML.match(/\$/))
{
// Do Fun scripts
}
});
或者如果您想从document
Element.descendants(document).each(function(item){
if(item.innerHTML.match(/\$/))
{
// Do Fun scripts
}
});