Как изменить имена атрибутов HTML с помощью jQuery?
Я хотел бы изменить все имена атрибутов, где class="testingCase"
на всем моем html-документе.
например. Изменение:
<a class="testingCase" href="#" title="name of testing case">Blabla</a>
<a class="testingCase" href="#" title="name of another testing case">Bloo</a>
Для этого:
<a class="testingCase" href="#" newTitleName="name of testing case">Blabla</a>`
<a class="testingCase" href="#" newTitleName="name of another testing case">Bloo</a>`
Я думал о нахождении и замене, но это кажется большим количеством кода для чего-то такого простого. Есть ли функция jQuery для этого или простого метода?
Ответы
Ответ 1
Я не думаю, что вы можете "переименовать" атрибут, но вы можете создавать новые атрибуты и удалять другие...
$('a.testingCase[title]').each(function() {
var $t = $(this);
$t
.attr({
newTitleName : $t.attr('title'),
})
.removeAttr('title')
;
});
Изменить: добавлено в бит, что делает его только выбором a
элементов с помощью class="testingCase"
Ответ 2
Я не думаю, что вы можете изменить имя атрибута, но что вы можете сделать:
- получить все теги
<a>
с атрибутом title;
- foreach из них, создайте атрибут newTitleName с тем же значением, что и заголовок;
- затем удалите атрибут title.
JQuery позволяет делать это со встроенными функциями следующим образом:
/* get all <a> with a "title" attribute that are testingCase
then apply an anonymous function on each of them */
$('a.testingCase[title]').each(function() {
/* create a jquery object from the <a> DOM object */
var $a_with_title = $(this);
/* add the new attribute with the title value */
$a_with_title.attr("newTitleName", $a_with_title.getAttribute('title'));
/* remove the old attribute */
$a_with_title.removeAttr('title');
});
Ответ 3
Немного позже, но ссылка имеет большое расширение функции jquery:
jQuery.fn.extend({
renameAttr: function( name, newName, removeData ) {
var val;
return this.each(function() {
val = jQuery.attr( this, name );
jQuery.attr( this, newName, val );
jQuery.removeAttr( this, name );
// remove original data
if (removeData !== false){
jQuery.removeData( this, name.replace('data-','') );
}
});
}
});
Пример
// $(selector).renameAttr(original-attr, new-attr, removeData);
// removeData flag is true by default
$('#test').renameAttr('data-test', 'data-new' );
// removeData flag set to false will not remove the
// .data("test") value
$('#test').renameAttr('data-test', 'data-new', false );
Я НЕ ПИСИЛ ЭТО. НО Я ТЕСТИРОВАЛ С JQ 1.10. КОД ИЗ ЛИНИИ.
Ответ 4
Вот простой плагин jquery-style, который дает вам метод renameAttr:
// Rename an entity attribute
jQuery.fn.renameAttr = function(oldName, newName) {
var args = arguments[0] || {};
var o = $(this[0])
o
.attr(
newName, o.attr(oldName)
)
.removeAttr(oldName)
;
};
Существует также этот пример, который добавляет параметр для удаления данных для старого атрибута.
Ответ 5
Один вкладыш
$('selector').replaceWith($('selector')[0].outerHTML.replace("oldName=","newName="));
работал отлично для меня, когда мне нужно было снять префикс из всех моих атрибутов
$('selector').replaceWith($('selector')[0].outerHTML.(/prefix\-/g,""));