Можно ли сразу удалить все атрибуты с помощью jQuery?
<img src="example.jpg" width="100" height="100">
к
<img>
Я попробовал $('img').removeAttr('*');
без везения. Кто-нибудь?
Можно ли сразу удалить все атрибуты с помощью jQuery?
<img src="example.jpg" width="100" height="100">
к
<img>
Я попробовал $('img').removeAttr('*');
без везения. Кто-нибудь?
Обновление: предыдущий метод работает в 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();
Простой метод, который не требует JQuery:
while(elem.attributes.length > 0)
elem.removeAttribute(elem.attributes[0].name);
Вместо создания нового 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();
Одной из очень веских причин сделать это для определенных тегов является очистка устаревшего контента, а также обеспечение соблюдения стандартов.
Скажем, например, вы хотели удалить устаревшие атрибуты или ограничить ущерб, вызванный атрибутами тега 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 должен включать метод удаления нескольких атрибутов по имени.
Я точно не знаю, для чего вы его используете, но вместо этого вы решили использовать классы css и переключить их? Это будет меньше кодирования на вашей стороне и меньше работы для браузера. Это, вероятно, не сработает [легко], если вы генерируете некоторые атрибуты на лету, как с помощью и с высотой.
Это приведет к удалению всех атрибутов и будет работать для каждого типа элементов.
var x = document.createElement($("#some_id").prop("tagName"));
$(x).insertAfter($("#some_id"));
$("#some_id").remove();
Сегодня у меня такая же проблема. Я думаю, что это будет полезно для вас.
var clone = $(node).html();
clone = $('<tr>'+ clone +'</tr>');
clone.addClass('tmcRow');