我有一個字符串,例如:<div style='text-align:center;' otherattr="script">
如何在JavaScript上標記特定屬性?
我想允許特定的屬性,例如只允許style屬性。
它應該返回:<div style='text-align:center;'>
我想允許的屬性風格,HREF,SRC和對齊。
非常感謝。
我有一個字符串,例如:<div style='text-align:center;' otherattr="script">
如何在JavaScript上標記特定屬性?
我想允許特定的屬性,例如只允許style屬性。
它應該返回:<div style='text-align:center;'>
我想允許的屬性風格,HREF,SRC和對齊。
非常感謝。
正如有人在評論中所說的,最好的方法是將字符串解析爲一個元素並在其上使用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>
謝謝你,但可能有另一種選擇期望創造新的元素?因爲這是一個超過50個元素的選項,所以我認爲它會真的很慢.. 我想要一些正則表達式。 – 2012-07-31 10:15:58
DOM腳本對於50個元素是很好的 - 只有當你達到數百或數千的時候會導致速度減慢。而且我們不會將它們附加到DOM(即導致瀏覽器重繪),因此這是另一大節省。我會一起去的。 – Utkanos 2012-07-31 10:18:37
好的,如果你這麼說的話,謝謝你,如果有人能給予aregex,那將會很棒。 – 2012-07-31 10:20:15
您可以使用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'));
此正則表達式將只匹配您指定的屬性,那麼您可以在一個新的標籤複製和粘貼的比賽來代替你從
開始了一個(style|href|src|align)=((".+?[^\\]")|('.+?[^\\]'))
這是什麼?看起來不像JavaScript。 – 2012-07-31 11:56:07
這是一個正則表達式,根據提問者在評論中提出的請求。 – Gabber 2012-07-31 12:02:12
啊對了,現在我明白了......語法高亮令我困惑。 – 2012-07-31 12:06:23
究竟是什麼問題? – jAndy 2012-07-31 10:03:29
JavaScript客戶端?然後我建議將字符串解析爲一個DOM元素並獲取其屬性列表(實際上,您應該在服務器端執行相同的操作)。 – 2012-07-31 10:04:11
你在說什麼「問題是什麼」? 我不能將這個插入到DOM,因爲可以有超過50 attrs,我正在尋找正則表達式來做到這一點,我不能寫我的自我= \ – 2012-07-31 10:10:56