2013-01-24 37 views
0

我有一個類名稱爲.aa_ant包含值1輸入。jQuery屬性選擇器與價值左右價值不起作用

現在,當我加載頁面我在做這個(案例1):

alert($('.aa_ant[value*=1]').length) 

它輸出1預期。現在

,我將其更改爲(CASE 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"); 
} 

謝謝!

+7

兩個工作對我蠻好:http://jsfiddle.net/zzR2w/ – Blender

+2

如果你改變了'1'到_what_? – nnnnnn

回答

4

您的控件不會出現有value屬性。 CSS屬性選擇器如果沒有在標記中設置,將無法讀取元素的屬性,這就是它失敗的原因。

這是一個jQuery實際上並未完全符合CSS規範的廣告。 [value*=1]的工作原因無關,因爲它不是一個有效的CSS選擇器,所以在現代瀏覽器中,它跳過瀏覽器的本機選擇器API,並使用jQuery的選擇器引擎,它支持非引號數字可以基於value屬性返回,即使value屬性沒有出現在標記中,所以您會得到預期的結果。其他選擇器[value*="1"],[value*=a][value*="a"]都是有效的CSS,但與您的控件不匹配,因爲它在標記中沒有value屬性,所以不會得到任何結果。

如果你需要它的實際價值來查詢的輸入控制,看看你能不能用別的東西識別它(不Knockout.js給它一個ID?),否則你必須做一些DOM traversalfiltering,並使用.val()檢查其值,以獲得正確的元素。選擇器只能用於基於靜態屬性(即通常不會改變值的屬性)的查詢,而不適用於像valueinput等元素的動態查詢。

一個簡單的例子使用.filter().val()

$('.aa_ant').filter(function() { return $(this).val().indexOf('1') >= 0; }); 
+0

那麼我該怎麼做? – Serafeim

+2

@Serafeim你可以使用'filter'方法。 – undefined

+0

是的!過濾器正在工作:) – Serafeim

0

你想用.length屬性實現什麼? .length將返回頁面上匹配選擇器的數量。

如果你想找到輸入的值的長度,你需要做到以下幾點:

alert($('.aa_ant[value*="1"]').val().length) 

這裏的工作你的例子:http://jsfiddle.net/ptzVy/

,這裏是如何讓一個例子輸入長度:

http://jsfiddle.net/J52Yr/

+1

使用length屬性我想查看是否有任何包含該值的輸入元素(我不希望任何元素具有該值) – Serafeim