jQuery: Додавання двох атрибутів через .attr (); метод


104

Редагувати:

Я дізнався, що, використовуючи інше значення _blank, НЕ працює в мобільних браузерах, щоб відкрити нові вікна / вкладки.

Наприклад, якщо вам потрібно відкрити нове вікно / вкладку:

  • Це працює у всіх браузерах, навіть мобільні браузери: target="_blank".

  • Це не працює на мобільних браузерах, але це дійсно працює на настільних браузерах: target="new".

-

Хоча у мене це працює, я не впевнений, чи є кращий спосіб це зробити, чи спосіб, яким я його придбав, - це правильний / єдиний спосіб.

В основному те, що я роблю, - це заміна всіх значень target="_new"або target="_blank"атрибутів target="nw", таким чином відкривається лише одне нове вікно, і в ньому відкриються всі інші нові вікна, щоб не перевантажувати користувача декількома вікнами.

Я також додаю атрибут " Відкривається в новому вікні " title="".

Тож рішення, яке я створив, таке:

$("a[target='_blank'], a[target='_new']").attr('target','nw').attr('title','Opens in a new window');

Зауважте два .attr();способи.

Це правильний спосіб додати два атрибути до елемента?

Я спробував, .attr('target','nw','title','Opens in a new window')але не вийшло.

Причина, яку я прошу, - це через принцип DYR (не повторюй себе), тому, якщо я можу вдосконалити код, який я маю, чудово, якщо ні, то він такий.

Дякую.


@zzzzBov, так, ви праві, дякую за інформацію.
Рікардо Зеа

Я хотів встановити два атрибути, щоб вони мали однакове значення, тож сором .attr('a,b','value')не виходить. Я також влаштувався .attr('a',1).attr('b',1). Менш покладаючись на нові вікна, можливо, у вашому випадку може бути інший підхід @ricardozea: P
Alastair

Відповіді:


228

Має працювати:

.attr({
    target:"nw", 
    title:"Opens in a new window",
    "data-value":"internal link" // attributes which contain dash(-) should be covered in quotes.
});

Примітка :

" При встановленні декількох атрибутів, лапки навколо імен атрибутів необов'язкові.

ПОПЕРЕДЖЕННЯ . Під час встановлення атрибута 'class' ви завжди повинні використовувати лапки!

З документації jQuery (вересень 2016 р.) Для .attr :

Спроба змінити атрибут типу на елементі вводу чи кнопки, створеному за допомогою document.createElement (), викине виняток для Internet Explorer 8 або новішої версії.

Редагувати :
для подальшої довідки ... Щоб отримати один атрибут, який ви використовували б

var strAttribute = $(".something").attr("title");

Щоб встановити один атрибут, який ви використовували б

$(".something").attr("title","Test");

Щоб встановити кілька атрибутів, потрібно обернути все в {...}

$(".something").attr( { title:"Test", alt:"Test2" } );

Редагувати - Якщо ви намагаєтесь отримати / встановити атрибут 'check' у прапорець ...

Вам потрібно буде використовувати prop() jQuery 1.6+

метод .prop () забезпечує спосіб явного отримання значень властивостей, а .attr () отримує атрибути.

... найважливіша концепція, яку слід пам’ятати про перевірений атрибут - це те, що він не відповідає перевіреному властивості. Атрибут фактично відповідає властивості defaultChecked і його слід використовувати лише для встановлення початкового значення прапорця. Значення зареєстрованого атрибуту не змінюється зі станом прапорця, тоді як властивість, що перевіряється, робить

Отже, щоб отримати прапорець у статусному полі , слід використовувати:

$('#checkbox1').prop('checked'); // Returns true/false

Або встановити прапорець як встановлений або невімкнений, ви повинні використовувати:

$('#checkbox1').prop('checked', true); // To check it
$('#checkbox1').prop('checked', false); // To uncheck it

1
Ага! Гаразд, це те, про що я мав на увазі. Дякую за пояснення, саме тому я обрав вашу відповідь над Дереком. Спасибі Адам. PS. Я прийму вашу відповідь через 7 хвилин, це не дає мені прийняти її зараз.
Рікардо Зеє

Виправлення: ви можете змінити атрибут типу в IE, якщо елемент новостворений і ще не доданий до DOM.
Акаш Кава

Щоб встановити кілька атрибутів, потрібно обернути все в {...} ... Чи не потрібно ключі бути в лапках?
Gcamara14


9

Якщо ви можете додати атрибути завантажувальної програми в тег прив’язки динамічно, це допоможе вам багато

 $(".dropdown a").attr({
      class: "dropdown-toggle",
     'data-toggle': "dropdown",
      role: "button",
     'aria-haspopup': "true",
     'aria-expanded': "true"
});


1

Використовуйте фігурні дужки і помістіть все атрибути, які ви хочете додати всередину

Приклад:

$('#objId').attr({
    target: 'nw',
    title: 'Opens in a new window'
});

0
Multiple Attribute

var tag = "tag name";
createNode(tag, target, attribute);

createNode: function(tag, target, attribute){
    var tag = jQuery("<" + tag + ">");
    jQuery.each(attribute, function(i,v){
        tag.attr(v);
    });
    target.append(tag);
    tag.appendTo(target);
}
var attribute = [
    {"data-level": "3"},
];

Спасибі за Вашу відповідь. Чи можете ви пояснити свій код або додати демонстраційну версію цього чи іншого?
Рікардо Зеа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.