2011-02-28 90 views
2

我的HTMLjQuery的条件语句

<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()?

回答

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/

+0

谢谢,但我只需要抓住有复选框的行没有选中并有textareas。以上将给我复选框只有CHECKED的行;这不是我所要求的。 – sarsnake 2011-02-28 18:36:38

+0

$(“tr:has(!。myChk:checked)td.from .fromInput)类似的东西?我如何有条件地说不检查? – sarsnake 2011-02-28 18:38:02

+0

我已经更新了我的答案..你应该使用“tr:not(:has(:checked))” – jessegavin 2011-02-28 18:42:15

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))") 
1

你可以用它来选择行:

$('tr', '#yourTable').has('input:checkbox:not(:checked)').has('textarea') 

现场演示:http://jsfiddle.net/simevidas/Zk5EH/1/

由于您可以在演示中看到只有具有TEXT的行AREA元素和未选中的复选框将被选中。


不过,我建议你的类设置为您行:包含textarea元素应该有一个具体的类集合的TR元素 - 如“方向”。然后你可以很容易地选择这些行,如下所示:

$('tr.directions', '#yourTable').each(function() { 
    if ($(this).find('input:checkbox')[0].checked) return; 

    // do your thing 
});