[英]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.