2010-03-01 34 views
0

我想首先使用正則表達式來查找div(因爲它的類名有點動態)。在Javascript中使用正則表達式查找和更改div

一旦發現,然後我需要在div放置一個字段裏面,所以我最終的

<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包含其他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]); 
    } 
} 

你要填寫放在fieldset上的什麼類,並更改div上的測試以確定是否需要操作它。

+0

div最definitly將包含其他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是一團糟。