Jquery条件语句

时间:2011-02-28 18:27:04

标签: javascript jquery html

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

3 个答案:

答案 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))")