Найти и изменить div с помощью регулярного выражения в Javascript - PullRequest
0 голосов
/ 01 марта 2010

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

После того, как найден, мне нужно поместить div внутри набора полей, так что я получаю конечный результат

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

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

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

Ответы [ 3 ]

3 голосов
/ 01 марта 2010

Это будет трудно сделать с регулярными выражениями и опрометчивыми. Например, что если div содержит другие div? Поиск правильного закрывающего тега 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 голосов
/ 01 марта 2010
   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 - это беспорядок.

0 голосов
/ 01 марта 2010

используя 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='...' />");
}
...