2014-12-28 38 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支持jQuery 1.6+版本! –

回答

1

要在jQuery的版本< 1.6更新布尔属性为checked,你应该使用JavaScript 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()完成了它的工作,可能是设置属性而不是属性。