Подтвердить что ты не робот

Удалить все атрибуты

Можно ли сразу удалить все атрибуты с помощью jQuery?

<img src="example.jpg" width="100" height="100">

к

<img>

Я попробовал $('img').removeAttr('*'); без везения. Кто-нибудь?

4b9b3361

Ответ 1

Обновление: предыдущий метод работает в IE8, но не в режиме совместимости IE8 и предыдущих версиях IE. Итак, вот версия, которая делает и использует jQuery для удаления атрибутов, поскольку она лучше справляется с этим:

$("img").each(function() {
  // first copy the attributes to remove
  // if we don't do this it causes problems
  // iterating over the array we're removing
  // elements from
  var attributes = $.map(this.attributes, function(item) {
    return item.name;
  });

  // now use jQuery to remove the attributes
  var img = $(this);
  $.each(attributes, function(i, item) {
    img.removeAttr(item);
  });
});

Конечно, вы можете сделать из него плагин:

jQuery.fn.removeAttributes = function() {
  return this.each(function() {
    var attributes = $.map(this.attributes, function(item) {
      return item.name;
    });
    var img = $(this);
    $.each(attributes, function(i, item) {
    img.removeAttr(item);
    });
  });
}

а затем выполните:

$("img").removeAttributes();

Ответ 2

Простой метод, который не требует JQuery:

while(elem.attributes.length > 0)
    elem.removeAttribute(elem.attributes[0].name);

Ответ 3

Вместо создания нового jQuery.fn.removeAttributes (продемонстрированного в принятом ответе) вы можете расширить существующий метод .removeAttr(), чтобы он принимал ноль параметры для удаления всех атрибутов из каждого элемента в наборе:

var removeAttr = jQuery.fn.removeAttr;
jQuery.fn.removeAttr = function() {

  if (!arguments.length) {
    this.each(function() {

      // Looping attributes array in reverse direction
      // to avoid skipping items due to the changing length
      // when removing them on every iteration.
      for (var i = this.attributes.length -1; i >= 0 ; i--) {
        jQuery(this).removeAttr(this.attributes[i].name);
      }
    });

    return this;
  }

  return removeAttr.apply(this, arguments);
};

Теперь вы можете вызывать .removeAttr() без параметров, чтобы удалить все атрибуты из элемента:

$('img').removeAttr();

Ответ 4

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

Скажем, например, вы хотели удалить устаревшие атрибуты или ограничить ущерб, вызванный атрибутами тега FONT, удалив их.

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

Пример 1: Замените все теги FONT содержащимся текстовым контентом. Это было бы идеальным решением, но с версии 6.1.2 перестало функционировать.: (

$('#content font').each(function(i) {
   $(this).replaceWith($(this).text());
});

Пример 2: Удалите все атрибуты из именованного тега - например. ШРИФТ. Опять же, это не работает, но я уверен, что он работал один раз на предыдущей версии jQuery.

$("font").each(function() {
 // First copy the attributes to remove.
 var attributes = $.map(this.attributes, function(item) {
   return item.name;
 });     
 // Now remove the attributes
 var font = $(this);
 $.each(attributes, function(i, item) {
   $("font").removeAttr(item);
 });
});

С нетерпением ждем 1.7, который promises должен включать метод удаления нескольких атрибутов по имени.

Ответ 5

Я точно не знаю, для чего вы его используете, но вместо этого вы решили использовать классы css и переключить их? Это будет меньше кодирования на вашей стороне и меньше работы для браузера. Это, вероятно, не сработает [легко], если вы генерируете некоторые атрибуты на лету, как с помощью и с высотой.

Ответ 6

Это приведет к удалению всех атрибутов и будет работать для каждого типа элементов.

    var x = document.createElement($("#some_id").prop("tagName"));
    $(x).insertAfter($("#some_id"));
    $("#some_id").remove();

Ответ 7

Сегодня у меня такая же проблема. Я думаю, что это будет полезно для вас.

var clone = $(node).html();
clone = $('<tr>'+ clone +'</tr>');
clone.addClass('tmcRow');