Можно ли сразу удалить все атрибуты с помощью 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);
});
});
Конечно, вы могли бы make a plug-in из него:
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);
});
});
}
, а затем сделать:
Не нужно плагин, это был цикл while, после которого я был. Благодаря! – David
Err, no. Это не приближается к рабочему решению для IE. 'removeAttribute' не работает вообще, как вы ожидаете здесь (подсказка: цикл' while' закроет бедный браузер навсегда). –
просто натолкнулся на это - я бы хотел, чтобы вы навсегда заблокировали IE на всех компьютерах и разрешили только одну вкладку, что указывает на страницу загрузки Chrome. Это было бы круто! (и нет, я не имею в виду разрешить IE 9 или 10 - IE 6 был/** все еще ** так мусор, что IE 9 и 10 заслуживают страдания!) – ClarkeyBoy
Я не знаю точно, для чего вы его используете, но вместо этого вы решили использовать классы css и переключить их? Это будет меньше кодирования на вашей стороне и меньше работы для браузера. Это, вероятно, не сработает [легко], если вы генерируете некоторые атрибуты на лету, как с помощью и с высотой.
Одна из серьезных причин сделать это для определенных тегов - очистить устаревшее содержимое, а также обеспечить соблюдение стандартов.
Предположим, например, вы хотели удалить устаревшие атрибуты или ограничить ущерб, вызванный атрибутами тега FONT, удалив их.
Я пробовал несколько методов для достижения этого, и ни один, включая пример выше, не работает по желанию.
Пример 1: Заменить все теги FONT на содержащееся текстовое содержимое. Это было бы идеальным решением, но с версии 6.1.2 перестало функционировать. :(
$('#content font').each(function(i) {
$(this).replaceWith($(this).text());
});
Пример 2:. Strip все атрибуты из имени тега - например FONT Опять же, это не может работать, но я уверен, что он имел обыкновение работать сразу после предыдущей версии 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, который обещает включить метод удаления нескольких атрибутов по имени.
Это приведет к удалению всех атрибутов и будет работать для каждого типа элемента.
var x = document.createElement($("#some_id").prop("tagName"));
$(x).insertAfter($("#some_id"));
$("#some_id").remove();
Это также удаляет привязки событий. –
Тогда причина для голосования? –
простой метод, который не требует JQuery:
while(elem.attributes.length > 0)
elem.removeAttribute(elem.attributes[0].name);
Лучший код - самый простой. Нет jQuery, нет локальных переменных, просто цикл. Благодаря! – StanE
Будьте осторожны, если вы выбрали объект JQuery. Перед использованием этого метода необходимо преобразовать его в htmlElement ([$ elem.get (0)] (https://api.jquery.com/get/)). –
Вместо создания нового jQuery.fn.removeAttributes
(продемонстрировано в принятом ответе), вы можете расширить существующий .removeAttr()
метод JQuery делает его принимать нулевые параметры в удалить все атрибуты из каждого элемента в наборе:
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()
без параметров, чтобы удалить все ATT ребра от элемента:
$('img').removeAttr();
Сегодня у меня такая же проблема. Я думаю, что это будет полезно для вас
var clone = $(node).html();
clone = $('<tr>'+ clone +'</tr>');
clone.addClass('tmcRow');
Плохая идея, вы должны удалить только какие атрибуты вы знаете о, DOM элемент имеет гораздо больше атрибутов, чем то, что вы указываете в теге каждый со своим собственным умолчанию или расчетное значение. – row1