最初に正規表現を使用して div を見つけようとしています (そのクラス名はやや動的であるため)。
見つかったら、div をフィールドセット内に配置する必要があるため、最終的に次の出力が得られます。
<fieldset class="...">
<div class="the one I found">...</div>
</fieldset>
javascriptでこれを行うにはどうすればよいですか?
どうもありがとう、スティーブ
最初に正規表現を使用して div を見つけようとしています (そのクラス名はやや動的であるため)。
見つかったら、div をフィールドセット内に配置する必要があるため、最終的に次の出力が得られます。
<fieldset class="...">
<div class="the one I found">...</div>
</fieldset>
javascriptでこれを行うにはどうすればよいですか?
どうもありがとう、スティーブ
これを正規表現で行うのは難しく、賢明ではありません。たとえば、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 のテストを変更して、それを操作する必要があるかどうかを判断する必要があります。
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='...' />");
}
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 はごちゃごちゃしています。