2014-12-28 2 views
0

Это мой JavaScript, с помощью JQuery:.attr ('проверено', 'проверено')/.attr ('проверено', 'истина'), не добавляя атрибут в HTML

$("#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.

+1

Поиск «атрибутов и свойств». – undefined

+2

@Vohuman Но '.attr()' должен обновить атрибут узла DOM, а '.prop()' был добавлен в 1.6 –

+0

@ Vohuman prop work для версии jQuery 1.6+ !! –

ответ

1

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

$("#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); 
} 
2

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

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

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