我的HTML
<tr id="uniqueRowId">
<td>
<input class="myChk" type="checkbox" />
</td>
<td class="from">
<textarea class="fromInput" ...></textarea>
</td>
<td class="to">
<textarea ...></textarea>
</td>
</tr>
我有一个表,其中每行与上面的行类似,只有一个例外:并非所有行都有textreas。我需要抓住所有具有textareas的行并且复选框未被“选中”。
然后我需要翻阅它们并做一些事情。 我试过像:
var editableRows = $("td.from .fromInput");
for (s in editableRows)
{
$s.val("test value");
}
但它不起作用。
1)我如何只获取关闭复选框并且具有fromInput textareas的行? 2)如何浏览它们并访问两个textareas的val()?
答案 0 :(得分:2)
我确信这可以优化,但我认为它会起作用。
$("tr:not(:has(:checked))").each(function(i, tr) {
var from = $(tr).find("td.from textarea").val();
var to = $(tr).find("td.to textarea").val();
//now do something with "from" and "to"
});
在jsFiddle上查看它:http://jsfiddle.net/RRPqb/
答案 1 :(得分:1)
您可以使用它来选择行:
$('tr', '#yourTable').has('input:checkbox:not(:checked)').has('textarea')
现场演示: http://jsfiddle.net/simevidas/Zk5EH/1/
正如您在演示中所看到的,只会选择具有TEXTAREA元素和未选中复选框的行。
但是,我建议你为你的行设置类:包含TEXTAREA元素的TR元素应该有一个特定的类集 - 比如“directions”。然后您可以轻松地选择这些行:
$('tr.directions', '#yourTable').each(function() {
if ( $(this).find('input:checkbox')[0].checked ) return;
// do your thing
});
答案 2 :(得分:0)
$("tr:not(:has(:checked)):has(input.fromInput)")
应该是你需要的。所有未检查任何内容但具有类“fromInput”
的输入的行如果你想循环遍历它们以获得任何textarea的值,只需扩展你的选择器:
$("tr:not(:has(:checked)):has(textarea.fromInput) textarea")
或如上所述,如果你想区分它们:
$("tr:not(:has(:checked)):has(textarea.fromInput)")
.each(function() {
var from = $(this).find("td.from textarea").val();
var to = $(this).find("td.to textarea").val();
})
我不知道这里有多少性能问题,但如果是,那么编写一个选择器来查找包含textarea的行,您可能会发现将一个类添加到行本身会有所帮助。
<tr class="hasTextarea">
然后你可以改变你的JQuery:
$("tr.hasTextarea:not(:has(:checked))")