0

最初に正規表現を使用して div を見つけようとしています (そのクラス名はやや動的であるため)。

見つかったら、div をフィールドセット内に配置する必要があるため、最終的に次の出力が得られます。

<fieldset class="...">
    <div class="the one I found">...</div>
</fieldset>

javascriptでこれを行うにはどうすればよいですか?

どうもありがとう、スティーブ

4

3 に答える 3

3

これを正規表現で行うのは難しく、賢明ではありません。たとえば、div に他の div が含まれている場合はどうなるでしょうか。HTML は正規言語ではないため、正しい終了 div タグを見つけることは正規表現ではできません。

一方、これはjQueryを使用した簡単なワンライナーです。

$("div.someClass").wrap("<fieldset class='...'></fieldset>");

もちろん、次のようなものを使用して、バニラ Javascript DOM で実行できます。

var divs = document.getElementsByTagName("div");
for (var i=0; i<divs.length; i++) {
  if (divs[i].className == "...") {
    var fs = document.createElement("fieldset");
    fs.className = "...";
    var parent = divs[i].parentNode;
    parent.insertBefore(fs, divs[i]);
    fs.appendChild(divs[i]);
  }
}

もちろん、フィールドセットに配置するクラスを入力し、div のテストを変更して、それを操作する必要があるかどうかを判断する必要があります。

于 2010-03-01T14:34:14.127 に答える
0

jqueryを使用して、これを試すことができます:

var classes = $(document.body).html().match(/class="pattern"/g); // find classname matchin pattern 
for(i in classes) {
  var nodes = $('.'+classes[i].substr (7, str.length - 8));
  nodes.wrap("<fieldset class='...' />");
}
于 2010-03-01T14:51:33.787 に答える
0
   window.onload = function() {

        var params = {
            has: "something"
        };

       // var fieldset = doc... get field the same as with div. 

        var divs = document.getElementsByTagName("div");
        for (var i = 0; i < divs.length; i++) {
            if (params.has.indexOf(divs[i].className) > 0) {
             //  fieldset.innerHTML  = divs[i].innerHTML;
               divs[i].innerHTML = "<fieldset class=''> + divs[i].innerHTML + "</fieldset>"; 
            }
        }

    }

正規表現を使用する必要はありません。indexof メソッドで十分です。また、jquery を使用する必要はありません。Javascript には優れた文字列関数と配列関数があります。それらを使用してください。ただし、DOM はごちゃごちゃしています。

于 2010-03-01T14:54:31.397 に答える