Учитывая строку HTML-кода, как пройти через каждый тег и удалить все атрибуты «события»? - PullRequest
1 голос
/ 10 января 2012

Используя JQuery, я хочу просмотреть каждый тег.

Если этот тег имеет атрибут, начинающийся с «вкл», то полностью удалите этот атрибут.

Я знаю, как перебрать все теги:

newvalue = $('<div>' + value + '</div>').find('*').each(function() {
}).html();

Но как мне пройти через все атрибуты и сопоставить строку с "on"?

Ответы [ 3 ]

1 голос
/ 10 января 2012

Из вашего примера я не уверен, работаете ли вы над строками или над реальными dom-узлами. Предположим, что это строки, что-то вроде:

var
  value = '<div onclick=""><span onfocus="" class=""><img onload="" /></span><a onclick=""></a></div>',
  newvalue;

newvalue = $('<div>' + value + '</div>').find('*').each(function() {
  var self = this;
  $.each([].slice.call(this.attributes, 0), function (idx, attr) {
    if (attr.nodeName.substr(0, 2).toLowerCase() === 'on') {
      $(self).removeAttr(attr.nodeName);
    }
  });
}).end().html();

console.log(newvalue);
1 голос
/ 10 января 2012

вы не сможете увидеть весь префикс On, так как он не является атрибутом actall в разметке html, но ссылается через обработчик событий.

, но вы можете видеть все события NAMe, которые связаны с этимelements.

Вы должны использовать: (в каждой функции)

$(this).data('events');

пример:

$.each($("#Myel").data("events"), function(i, e) {
    alert(i);
});
0 голосов
/ 10 января 2012
newvalue = $('<div>' + value + '</div>').find('*').each(function() {
  // current element
  var thiz = $(this);
  // attributes of element
  var atts = thiz.get(0).attributes;
  for (var i = 0; i < atts.length; i++) {
    var attrName = atts[i].name.trim();
    // ignore attribute which does not start with "on"
    if (attrName.toLowerCase().indexOf("on") != 0)
      continue;
    // remove
    thiz.removeAttr(attrName);
  }
}).html();

РЕДАКТИРОВАТЬ: использовать функции DOM

newvalue = $('<div>' + value + '</div>').find('*').each(function() {
  // attributes of element
  var atts = this.attributes;
  for (var i = 0; i < atts.length; i++) {
    var attrName = atts[i].name.trim();
    // ignore attribute which does not start with "on"
    if (attrName.toLowerCase().indexOf("on") != 0)
      continue;
    // remove
    this.removeAttribute(attrName);
  }
}).html();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...