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

Tilde "~" in jquery selector obtains unexpected set

我有一个特定的值,正在检查是否可以找到具有以我的值开头的 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 Error: Syntax error, unrecognized expression: input:radio[id^=~]

检查 运行 版本低于 1.8 的 jQuery 片段,选择得到所有收音机,甚至没有 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>