使用chrome 23,firefox 3.5和IE9测试以下代码段:
<!DOCTYPE html>
<html><head>
<title>test</title>
<script src="jquery-1.7.2.min.js"></script>
<script>
$(function() {
$('#id1 *').not('.c1 *').attr('disabled', true);
});
</script>
</head><body>
<div id="id1">
<div class="c1">
<input type=radio>td1</input>
</div>
<div class="c2">
<input type=radio>td2</input>
</div>
</div>
</body></html>
只应禁用td2,但通常的嫌疑人(IE9)会禁用td1和td2。
你会如何解决这个问题?
答案
实际上问题不是由于jquery选择器,而是因为当一个元素在IE9中获得'禁用'属性时,所有子元素都被禁用。但是在Chrome和FF中不会发生这种情况(至少对于上面的版本而言)
更多信息请访问:How should disabled 'div' act?
答案 0 :(得分:4)
请尝试使用此选择器:
$('#id1 :not(.c1) input').attr('disabled', true);
你写的内容应该像这样重写:
$('#id1 *').not('.c1').find("*").attr('disabled', true);
答案 1 :(得分:1)
$('#id1 div').each(function (){
$(this).children('input').attr('disabled', !$(this).hasClass("c1"));
});
答案 2 :(得分:1)
IE可能正在做正确的事情:
$('#id1 *')
选择#id1
内的所有标记,为您提供两个div和两个输入标记.not('.c1 *')
从上面的列表中移除.c1
中的输入标记,最终得到三个元素:两个div和一个输入disabled=disabled
。在IE中,<div disabled=disabled>...</div>
禁用div标签及其中的所有内容。我相信你可以达到预期的结果:
$('#id1 div:not(.c1) :radio').prop('disabled', true);