JQuery: добавление двух атрибутов через .attr(); метод

EDIT:

Я узнал, что используя другое значение, чем _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 (Do not Repeat Yourself), поэтому, если я могу улучшить код, который у меня есть, отличный, если нет, то это то, что есть.

Спасибо.

Ответ 1

Должен работать:

.attr({
    target:"nw", 
    title:"Opens in a new window"
});

Примечание

"При установке нескольких атрибутов кавычки вокруг имен атрибутов являются необязательными.

ПРЕДУПРЕЖДЕНИЕ. При установке атрибута" class" вы всегда должны использовать кавычки!

Из документации jQuery (сентябрь 2016) для . attr:

Попытка изменить атрибут типа на элемент ввода или кнопки, созданный с помощью document.createElement(), вызовет исключение в Internet Explorer 8 или старше.

Edit:
Для дальнейшего использования... Чтобы получить один атрибут, вы должны использовать

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

Чтобы установить один атрибут, вы должны использовать

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

Чтобы установить несколько атрибутов, вам нужно обернуть все в {...}

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

Изменить - если вы пытаетесь получить/установить атрибут "checked" из флажка...

Вам нужно будет использовать 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

Ответ 2

правильный способ:

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

Ответ 3

Если вам добавить динамические атрибуты bootstrap в ярлыке anchor, то это поможет вам выполнить

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

Ответ 4

Что-то вроде этого:

$(myObj).attr({"data-test-1": num1, "data-test-2": num2});