[英]jQuery attribute selector with quotes around value doesn't work
我有一個類名為.aa_ant
的輸入,其中包含值1
。
現在,當我加載頁面時,我正在執行此操作(案例1):
alert($('.aa_ant[value*=1]').length )
它按預期輸出1
。
現在,我將其更改為(案例2):
alert($('.aa_ant[value*="1"]').length )
它停止工作。 另外,如果我將1
更改為a
它也會停止工作(情況1和2)。
我做錯了什么?
更新: .aa_ant是一個剔除控件:
<input class='aa_ant' data-bind='value: aa_ant, readOnly: is_readonly' />
可能有問題嗎?
更新:使用length屬性,我想查看是否有任何包含該值的輸入元素(我不希望任何元素具有該值)。 另外,我知道我可以獲取所有.aa_ant元素並枚舉它們,以查看是否有人包含該值,但我想使用jquery-ish。
更新:這是供參考的實際解決方案:
if($('.aa_ant').filter(function(index) { if(this.value.indexOf("1") >=0) { return true ; } return false ; }).length>0 ) { alert("Error"); }
謝謝您的幫助 !
您的控件似乎沒有value
屬性。 如果未在標記中設置元素,則CSS屬性選擇器將無法讀取元素的屬性,這就是它失敗的原因。
這是jQuery實際不完全符合所宣傳的CSS規范的情況。 [value*=1]
無論如何都起作用的唯一原因是,它不是有效的CSS選擇器,因此在現代瀏覽器中,它會跳過瀏覽器的本機Selectors API,而是使用jQuery的選擇器引擎,該引擎不支持帶引號的數字, 並且可以基於value
屬性,即使value
屬性沒有出現在標記中,也可以得到預期的結果。 其他選擇器[value*="1"]
, [value*=a]
和[value*="a"]
都是有效的CSS,但不會與您的控件匹配,因為在選擇器中沒有value
屬性標記,因此您沒有任何結果。
如果需要通過輸入控件的實際值查詢輸入控件,請查看是否可以通過其他方式標識它(Knockout.js是否為其提供ID?),否則必須進行一些DOM遍歷或篩選 ,並使用.val()
檢查其值,以獲取正確的元素。 選擇器應只用於查詢基於靜態屬性(即屬性不通常值變化),而不是動態的像value
為input
元件。
使用.filter()
和.val()
快速示例:
$('.aa_ant').filter(function() { return $(this).val().indexOf('1') >= 0; });
您想通過.length屬性實現什么? .length將返回頁面上匹配選擇器的數量。
如果要查找輸入值的長度,則需要執行以下操作:
alert($('.aa_ant[value*="1"]').val().length)
這是您的示例工作: http : //jsfiddle.net/ptzVy/
這是一個如何獲得輸入長度的示例:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.