2010-03-01 1 views
0

Я пытаюсь сначала найти div, используя регулярное выражение (так как его имя класса несколько динамическое).Найти и изменить div, используя регулярное выражение в Javascript

Найдя, то мне нужно поместить DIV внутри FIELDSET, так что я в конечном итоге, окончательный вывод

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

Как я могу сделать это в JavaScript?

Большое спасибо, Стив

+1

Это DIV в документе DOM? Если это так, используйте методы DOM. – Gumbo

+0

Да, div содержится в DOM. Как я могу использовать методы DOM? –

+0

'document.getElementsByClassName' (https://developer.mozilla.org/en/DOM/document.getElementsByClassName). – kennytm

ответ

3

Это будет трудно сделать с регулярными выражениями и опрометчивым. Например, что, если div содержит другие divs? Поиск правильного закрывающего тега div не является тем, что может выполнять регулярное выражение, потому что HTML не является обычным языком.

С другой стороны, это тривиальный один лайнер с 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, чтобы выяснить, нужно ли вам манипулировать им или нет.

+0

В div наиболее определенно будут содержаться другие div. Мне нужно скопировать его и все его подэлементы в поле. Как я могу найти имя «someClass», используя регулярное выражение? –

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='...' />"); 
} 
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 - беспорядок.