簡體   English   中英

jQuery最接近屬性過濾器

[英]jQuery closest with attribute filter

jQuery 1.5.1是否支持最接近的方法中的屬性選擇器?

給定下面的結構, el代表值為513的復選框,我正試圖通過值0來檢查祖先復選框。

$(el).closest("input[value='0']")[0].checked = true;

但選擇器什么也沒有返回。

我錯過了一些傻事嗎?

在此輸入圖像描述


編輯

嘆了口氣,因此值為0的復選框不是el的祖先,只是ul祖先的兄弟。 我得到它與合作

$(el).closest("ul").siblings("input[value='0']")[0].checked = true;

但是我們有更清潔的方法來抓住它嗎?

.closest()方法 支持屬性選擇器與任何其他jQuery的方法(雖然我不知道你提到的jQuery的特定版本做),但這里的問題是, .closest()不只是在看一般的附近,它通過祖先上升。 您正在嘗試選擇一個不是您開始使用的元素的祖先的輸入元素。 (鑒於輸入不能包含其他元素,它們永遠不會成為任何東西的祖先......)

您應該可以通過首先選擇目標復選框的父li元素來執行此操作:

$(el).closest('li:has(input[value="0"])')
     .find('input[value="0"]').prop("checked",true);

演示: http//jsfiddle.net/Vpzyj/

當然,如果你能夠在頂級菜單項中添加一個類,你就不需要亂用“:has”,你可以說:

$(el).closest('li.topMenu').find('input[value="0"]').prop("checked",true);

我相信你不應該需要[0]因為.closest只返回找到的第一個元素,而不是parent()返回多個元素。

$(el).closest("input[value='0']").prop("checked") = true;

是我喜歡這樣做的方式。

這是假設您在檢查513框時檢查“值0”復選框。

編輯:對不起,誤讀了這個。 實際上,您需要嘗試獲取<\\ li>標記,然后獲取基礎復選框。 您實際上在尋找不是直接父母的復選框。

編輯2:您意識到您的編輯不正常嗎? 等等......它會...你使用兄弟姐妹而不是孩子我的錯誤。

編輯3:如何使用:

$(el).parents().get(':eq(2)').children(':first-child');

或者我們不假設布局是固定的?

檢查: http//api.jquery.com/closest/

.closest( selector ) // version added: 1.3

最近檢查 DOM樹 ,而不是在同一水平上。

關於你的問題:是的,確實如此(http://api.jquery.com/closest/)

您的代碼不起作用,因為nearest()通過DOM樹上升,在您的情況下,它必須上下移動,因為您的復選框0不是復選框513的祖先。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM