.attr('checked', 'checked') / .attr('checked', 'true') без добавления атрибута в html

Это мой JavaScript, использующий jQuery:

$("#E_DIV_H input[value='E,F']").attr('checked', 'checked');
var data = $('#E_DIV_H').html();
$('#copy').html(data);

Когда он копирует данные из одного <div> (#E_DIV_H) в другой DIV (#copy), он снимает флажок, который уже должен быть установлен из-за следующего кода!

$("#E_DIV_H input[value='E,F']").attr('checked', 'checked');

Используя Firebug, я вижу, что .attr('checked', 'checked') устанавливает флажок без добавления атрибута.

Есть ли решение, работающее в кроссбраузерном режиме? Я использую jQuery 1.4.2.


person Shahid Ghafoor    schedule 28.12.2014    source источник
comment
Поиск атрибутов и свойств.   -  person undefined    schedule 28.12.2014
comment
@Vohuman Но .attr() должен обновить атрибут узла DOM, а .prop() был добавлен в 1.6.   -  person A. Wolff    schedule 28.12.2014
comment
Поддержка @Vohuman для версии jQuery 1.6+!!   -  person Shahid Ghafoor    schedule 28.12.2014
comment
@ShahidGhafoor jsbin.com/givizu/1/edit?html,js,console кажется, что это работает просто отлично. Нажмите «Выполнить» на поле, оно говорит "<input id=\"myCheckbox\" type=\"checkbox\" checked=\"checked\">", так что теперь кажется, что у окна установлен атрибут. Не могли бы вы связать демо, где это не работает?   -  person Joeytje50    schedule 28.12.2014
comment
Я написал prop метод?   -  person undefined    schedule 28.12.2014
comment
Вопрос в том, как вы проверяете обновленный HTML???   -  person A. Wolff    schedule 28.12.2014
comment
@Vohuman Нет, но мне просто интересно: не обновляет ли атрибут attr() в jq1.4.2 тогда?   -  person A. Wolff    schedule 28.12.2014
comment
@Vohuman Я только что проверил, на самом деле это не jsfiddle.net/a23eebzr   -  person A. Wolff    schedule 28.12.2014
comment
@ A.Wolff Да, более старый attr пытается изменить свойства, если может.   -  person undefined    schedule 28.12.2014
comment
@A.Wolff Я проверил обновленный HTML с помощью FireBug! в фаерфоксе   -  person Shahid Ghafoor    schedule 28.12.2014
comment
@Vohuman Я, только что проверил .attr() DOC, там все ясно объясняется. Приятно вспомнить!   -  person A. Wolff    schedule 28.12.2014
comment
@ShahidGhafoor вместо этого вам придется использовать метод javascript setAttribute('checked', true)   -  person A. Wolff    schedule 28.12.2014
comment
@A.Wolff, можешь привести пример, потому что $("#E_DIV_H input[value='E,F']").setAttribute('checked', true); не работает   -  person Shahid Ghafoor    schedule 28.12.2014
comment
@Joeytje50 Joeytje50 также работает с jsfiddle, jsfiddle.net/9wq20y45, но не работает ни в одном браузере! :( см. ссылку выше, и если вы делаете html на локальном компьютере, он не работает :(   -  person Shahid Ghafoor    schedule 28.12.2014
comment
@ShahidGhafoor, эта ссылка у меня отлично работает. Какой браузер вы используете?   -  person Joeytje50    schedule 28.12.2014
comment
@ShahidGhafoor Вы должны вызывать его для элемента DOM, а не для объекта jQuery. Если вы нацелены только на один элемент, вы можете использовать: $("#E_DIV_H input[value='E,F']")[0].setAttribute('checked', true); Для более чем одного элемента вам нужно будет выполнить итерацию по возвращаемой коллекции, например: stackoverflow.com/a/18455368/1414562   -  person A. Wolff    schedule 28.12.2014
comment
@ А.Вольф, да! теперь работает !! Благодарность! пожалуйста, напишите свой ответ! приму ;)   -  person Shahid Ghafoor    schedule 28.12.2014
comment
@Joeeytje50 Joeytje50, если вы создадите html-файл на локальной машине! и если вы запустите его, он не будет работать, любой браузер firefox, chrome и IE! но setAttribute решил мою проблему! Спасибо и вам за сотрудничество!   -  person Shahid Ghafoor    schedule 28.12.2014


Ответы (2)


Чтобы обновить логический атрибут как checked в версии jQuery ‹1.6, вы должны использовать метод setAttribute() javascript, например:

$("#E_DIV_H input[value='E,F']")[0].setAttribute('checked', true);

Если у вас есть более одного элемента для таргетинга, вам нужно выполнить итерацию по коллекции, например:

var els = document.querySelectorAll("#E_DIV_H input[value='E,F']");
for (var i=0; i < els.length; i++) {
    els[i].setAttribute("checked", true);
}
person A. Wolff    schedule 28.12.2014

Если вы хотите скопировать элемент, используйте .clone(). Работать с HTML неудобно.

$('#copy').replaceWith(
    $('#E_DIV_H').clone().attr('id', 'copy')
);

В любом случае, причина, по которой он не работает, вероятно, в том, что (как вы знаете) .prop() был введен в 1.6.0; до этого .attr() выполнял свою работу и, вероятно, устанавливал свойство вместо атрибута.

person Ry-♦    schedule 28.12.2014