2015-07-23 2 views
0

Я пытаюсь удалить все атрибуты, кроме определенных белых списков из длинной строки html. Я использую DOM для его анализа.Удалить атрибуты из html string - error with removeAttributeNode

Я знаю, что есть много других вопросов, но мой вопрос касается ошибки, которую я получаю с выполнением removeAttributeNode в моем коде ниже.

var div = document.createElement('div'); 
div.innerHTML = '<p class=\"p\">text here</p> <div id=\"divId\"></div>'; 
var elements = div.getElementsByTagName('*'); 
var whitelist = ["src", "width", "height"]; 
for (var i = 0; i < elements.length; i++) { 
    if (elements[i].attributes.length !== 0) { 
     var attr = elements[i].attributes; 
     for (var j = 0; j < attr.length; j--) { 
      var attrName = attr[j].name; 
      for (var k = 0; k < whitelist.length; k++) { 
       if (attrName !== whitelist[k]) 
        elements[i].removeAttributeNode(attr); 
      } 
     } 
    } 
} 

Но, я получаю следующее сообщение об ошибке: Failed to execute 'removeAttributeNode ' on Element: the 1st argument provided is either null, or an invalid Attr object.

Но я проверил с заявлениями консольных и элементы [я] не равно нулю. Например, элементы [0] = <p class="p">. Как мне получить removeAttributeNode? Спасибо за помощь!

+0

'removeAttributeNode (атр)', вероятно, следует просто 'removeAttribute (attrName)' – dandavis

+0

removeAttributeNode принимает AttributeNode в качестве параметра. Element.attributes - это только именованная коллекция узлов атрибутов, но не сам узел. Попробуйте getAttributeNode (attrs [i] .name), чтобы перебрать узлы, а затем удалить их. –

+0

http://plnkr.co/edit/ckAmq7zuXxShlNTgKoUC?p=preview – dfsq

ответ

0

В последнем цикле сделайте что-нибудь подобное.

for (var k = 0; k < whitelist.length; k++) { 
       if (attrName !== whitelist[k]) 
       { 
        elements[i].removeAttributeNode(elements[i].getAttributeNode(attrName)); 
       } 
} 
+0

По какой-то причине 'removeAttributeNode' не работает. Это дает ошибку, что элементы [i] не являются атрибутом. Но, 'removeAttribute', похоже, работает. Но 'removeAttr' возвращает массив HTMLCollection? Как я могу получить строку без возвращаемых атрибутов следующим образом: '

текст здесь

' – llams48

Смежные вопросы