2012-07-31 47 views
0

我有一個字符串,例如:<div style='text-align:center;' otherattr="script">如何在JavaScript上標記特定屬性?

我想允許特定的屬性,例如只允許style屬性。

它應該返回:<div style='text-align:center;'>

我想允許的屬性風格,HREF,SRC和對齊。

非常感謝。

+0

究竟是什麼問題? – jAndy 2012-07-31 10:03:29

+0

JavaScript客戶端?然後我建議將字符串解析爲一個DOM元素並獲取其屬性列表(實際上,您應該在服務器端執行相同的操作)。 – 2012-07-31 10:04:11

+0

你在說什麼「問題是什麼」? 我不能將這個插入到DOM,因爲可以有超過50 attrs,我正在尋找正則表達式來做到這一點,我不能寫我的自我= \ – 2012-07-31 10:10:56

回答

0

正如有人在評論中所說的,最好的方法是將字符串解析爲一個元素並在其上使用DOM方法。對於DOM處理來說,REGEX通常不是個好主意。

這將允許id屬性,但刪除任何其他。

//prep 
    var str = "<div id='something' class='something_else'></div>", 
    allowed_attrs = ['id'], 
    tmp_container = document.createElement('div'),; 

    //parse string as element and retrieve it as one 
    tmp_container.innerHTML = str; 
    var div = tmp_container.querySelector('div'); 

    //remove any non-allowed attributes 
    for (var i=0; i<div.attributes.length; i++) 
     if (allowed_attrs.indexOf(div.attributes[i].name) == -1) 
      div.removeAttribute(div.attributes[i].name); 

    //check 
    alert(tmp_container.innerHTML); //<div id='something'></div> 
+0

謝謝你,但可能有另一種選擇期望創造新的元素?因爲這是一個超過50個元素的選項,所以我認爲它會真的很慢.. 我想要一些正則表達式。 – 2012-07-31 10:15:58

+0

DOM腳本對於50個元素是很好的 - 只有當你達到數百或數千的時候會導致速度減慢。而且我們不會將它們附加到DOM(即導致瀏覽器重繪),因此這是另一大節省。我會一起去的。 – Utkanos 2012-07-31 10:18:37

+0

好的,如果你這麼說的話,謝謝你,如果有人能給予aregex,那將會很棒。 – 2012-07-31 10:20:15

0

您可以使用jQuery

var tmp = $('<div style="text-align:center;" otherattr="script">'); 
var elem = $('<div>'); 
elem.attr('style', tmp.attr('style')) 
elem.attr('href', tmp.attr('href')) 
elem.attr('src', tmp.attr('src')) 
elem.attr('align', tmp.attr('align')); 
0

此正則表達式將只匹配您指定的屬性,那麼您可以在一個新的標籤複製和粘貼的比賽來代替你從

開始了一個
(style|href|src|align)=((".+?[^\\]")|('.+?[^\\]')) 
+0

這是什麼?看起來不像JavaScript。 – 2012-07-31 11:56:07

+0

這是一個正則表達式,根據提問者在評論中提出的請求。 – Gabber 2012-07-31 12:02:12

+0

啊對了,現在我明白了......語法高亮令我困惑。 – 2012-07-31 12:06:23

相關問題