Что-то не пойму, в чем проблема.
Есть табличка. Задача: выделить те строки, у которых в _первой_ ячейке есть checked чекбокс, и при этом он не должен быть disabled.
Код тут:
<html>
<body>
<script type="text/javascript" src="jquery-1.3.2.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("table tr:has(td:first-child > :checkbox:checked:not(:disabled))")
.css("background-color", "red");
});
</script>
<table>
<tr><td><input type="checkbox" value="true" /></td><td>Item 1</td><td>Item 2</td></tr>
<tr><td><input type="checkbox" value="true" checked="true"/></td><td>Item 1</td><td>Item 2</td></tr>
<tr><td><input type="checkbox" value="true" /></td><td>Item 1</td><td><input type="checkbox" value="true" checked="true"/></td></tr>
<tr><td><input type="checkbox" value="true" checked="true" disabled="true"/></td><td>Item 1</td><td>Item 2</td></tr>
<tr><td><input type="checkbox" value="true" /></td><td>Item 1</td><td>Item 2</td></tr>
<tr><td><input type="checkbox" value="true" checked="true"/></td><td>Item 1</td><td>Item 2</td></tr>
</table>
</body>
</html>
В результате ничего вообще не выделяется. Решить проблему можно например убрав first-child:
$("table tr:has(td > :checkbox:checked:not(:disabled))")
но тогда в выбор попадает строка, в которой чекбокс не в первой колонке
Второе решение, убрать проверку на disabled:
$("table tr:has(td:first-child > :checkbox:checked)")
тогда всё правильно, но не проверяется на disabled
Третий вариант, работающий:
$("table tr:has(td:first-child > :checkbox:checked)").not(":has(td:first-child > :checkbox:disabled)")
так всё работает, как задано задачей... но, ПОЧЕМУ не работает первый вариант?