1

很长一段时间以来,我需要第一次使用纯 Javascript,并且已经习惯了 jQuery 的舒适床垫,所有重要的东西都在逃避我。

我需要在正则表达式上选择一堆 div。所以我有这样的东西;

<div id="id_123456_7890123"> .. </div>
<div id="id_123456_1120092"> .. </div>
<div id="id_555222_1200192"> .. </div>
<div id="id_123456_9882311"> .. </div>

而且我需要创建一个循环,该循环遍历所有 div 的 id 以id_123456_. 我该怎么做呢?

我之前使用 jQuery 和:regex过滤器插件,但是看着它,我似乎无法在纯 javascript 重写中挽救很多东西。

4

4 回答 4

8

在普通的 javascript 中,您可以执行这个应该在每个浏览器中都可以使用的通用搜索:

var divs = document.getElementsByTagName("div"), item;
for (var i = 0, len = divs.length; i < len; i++) {
    item = divs[i];
    if (item.id && item.id.indexOf("id_123456_") == 0) {
        // item.id starts with id_123456_
    }
}

工作示例:http: //jsfiddle.net/jfriend00/pYSCq/

于 2012-09-24T14:28:38.003 回答
4

HTML DOM querySelectorAll() 方法将在这里工作。

document.querySelectorAll('[id^="id_"]');

在这里借用StackOverFlow

于 2016-06-16T10:18:53.227 回答
1

这是通过递归遍历整个 DOM 来实现的。

它可能不是最有效的,但应该适用于每个浏览器。

function find_by_id(el, re, s) {

    s = s || [];
    if (el.tagName === 'DIV' && re.exec(el.id) !== null) {
        s.push(el);
    }

    var c = el.firstChild;
    while (c) {
        find_by_id(c, re, s);
        c = c.nextSibling;
    }

    return s;
}

var d = find_by_id(document.body, /^id_123456_/);

http://jsfiddle.net/alnitak/fgSph/

于 2012-09-24T14:31:25.753 回答
1

你在这里:http: //jsfiddle.net/howderek/L4z9Z/

HTML:

<div id="nums">
<div id="id_123456_7890123">Hey</div>
<div id="id_123456_1120092">Hello</div>
<div id="id_555222_1200192">Sup</div>
<div id="id_123456_9882311">Boom</div>
</div>
<br/>
<br/>
<div id="result"></div>​

Javascript:

divs = document.getElementsByTagName("div");
divsWith123456 = new Array();
for (var i = 0;i < divs.length;i++) {
    if (divs[i].id.match("id_123456") != null) {
        divsWith123456.push(divs[i]);
        document.getElementById("result").innerHTML += "Found: divs[" + i + "] id contains id_123456, its content is \"" + divs[i].innerHTML + "\"<br/><br/>";
    }
}​
于 2012-09-24T14:33:50.753 回答