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>

そして、で始まる id を持つすべての div を通過するループを作成する必要があります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 に答える