波浪号“~”;在jquery中选择器获得意外的集合

Tilde "~" in jquery selector obtains unexpected set

本文关键字:选择器 意外 集合 jquery      更新时间:2023-09-26

我有一个特定的值,我正在检查是否可以找到具有Id属性值的单选按钮,从我的值开始:

if($("input:radio[id^="+myValue+"]").length > 0)
{
   // some logic
}

由于我有一个约定,myValue的求值应该是~STR_2,因此导致下面的选择求值"input:radio[id^=~STR_2]"

在我的页面中没有以这个id ~STR_2开头的单选按钮,但是得到的选择包含了页面上所有的单选按钮,并且长度>大于零。

我知道波浪~操作符用于查找包含特定值的字符串,但它被用作~=而不是=~

我希望有人能解释这是怎么发生的,以及在一个选择器中有^=~是什么意思。

注意:当我使用单引号来包装值$("input:radio[id^='"+myValue+"']")

时,问题得到了解决

我不能把我的手在确切的问题,但这似乎是一个jQuery错误。

我使用的是jQuery库1.6,我已经在多个jQuery版本上尝试了这个例子,并且版本号开始逐渐上升。在jQuery 1.8版本中,这些选择给出了以下错误:

Uncaught错误:语法错误,无法识别的表达式:输入:无线电[id ^ = ~]

检查在jQuery 1.8以下版本上运行的代码片段,选择得到所有无线电,甚至没有id属性的无线电:

var myValue = "~item34";
console.log($("input:radio[id^="+myValue+"]").length);
console.log($("input:radio[id^="+myValue+"]"));
if($("input:radio[id^="+myValue+"]").length > 0)
{
   $("#result").html("selection found " + $("input:radio[id^="+myValue+"]").length + " radio buttons");
}
else
{
  $("#result").html("no selection");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<input type="radio" name="test" id="item1"  value="1"/> A
<input type="radio" name="test" id="item2"  value="2"/> B
<input type="radio" name="test" id="item3"  value="3"/> C
<input type="radio" name="test" id="item4"  value="4"/> D
<input type="radio" name="test" value="5"/> E
<input type="radio" name="test" id="item6"  value="6"/> F
<input type="radio" name="test" id="item7"  value="7"/> G
<br />
<br />
<p id="result"></p>