Javascript搜索dom中所有出现的角色?

时间:2010-05-26 00:52:31

标签: javascript

我想在dom中找到所有出现的$字符,这是怎么做到的?

5 个答案:

答案 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)

如果您只需要一堆字符串并且不需要对包含$的节点的引用,那么最简单的方法是在正文的文本内容上使用正则表达式。请注意,innerTexttextContent并不完全相同。可能影响此处的主要差异是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
   }
});