2011-02-28 110 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 
});