Javascript 在多重选择器中使用变量

Javascript 在多重选择器中使用变量,javascript,jquery,spring-boot,jquery-selectors,thymeleaf,Javascript,Jquery,Spring Boot,Jquery Selectors,Thymeleaf,我使用jQuery1.11并希望对所有id执行操作,这些id以partitions0.instances0.natures开头,以typeCle结尾,比如:id=“partitions0.instances0.natures0.typeCle”。然后我会影响到那些,与我选择的元素相同的值。但我的问题是选择器 我试过很多方法,比如​$(“[id^=”+instanceId'][id$=typesCle]”)带双引号或不带双引号,但目前无法找到正确答案。错误为Uncaught SyntaxError

我使用jQuery1.11并希望对所有id执行操作,这些id以
partitions0.instances0.natures
开头,以
typeCle
结尾,比如:
id=“partitions0.instances0.natures0.typeCle”
。然后我会影响到那些,与我选择的元素相同的值。但我的问题是选择器

我试过很多方法,比如
​$(“[id^=”+instanceId'][id$=typesCle]”)
带双引号或不带双引号,但目前无法找到正确答案。错误为
Uncaught SyntaxError:无效或意外的令牌

所有jquery代码:

var instanceId = $(this).attr("id");
var natureId = $(this).attr("id");
var valeur = $(this).prop('value');
natureId = natureId.replace("typesCle", "nature").replace(/\./g, '\\\\.');
​​$('[id^='+ natureId +'][id$=typesCle]').each(){
    this.val(valeur);
}
我还将变量替换为要检查的值,并收到相同的错误消息:

​$('[id^=partitions0\\.instances0\\.nature][id$=typesCle]').each(){
    console.log(valeur);
    this.val(valeur);
}
html代码:

<div class="col-sm-6">
       <select th:field="*{partitions[__${rowPartitionStat.index}__].instances[__${rowInstanceStat.index}__].typesCle}" class="form-control modRepInstance">
         <option th:each="typeCle : ${allTypesCle}"
           th:value="${typeCle}" th:text="${typeCle}">...</option>
       </select>
</div>

...

来回一点之后,您似乎不需要避开圆点,只需要用一对额外的双引号将选择器括起来

您的原始代码中实际上有第一个双引号,但位于错误的位置,并且缺少结束引号以及缺少的
+
,因此出现语法错误

总的来说,与原始代码的不同之处在于重新定位开始引号、添加结束引号和添加第二个
+

组织:
​'"[id^='+instanceId'][id$=typesCle]'

新:
“[id^=“”+instanceId+”][id$=typesCle]”

下面的示例似乎有效。尽管您仍然需要使用
.each()
来迭代所有匹配项

var outerId='partitions0.instances0.nature';
$(文档).ready(函数(){
变量选择器='[id^=“'+outerId+'”][id$=typesCle];
控制台日志(选择器);
变量x=$(选择器);
控制台日志(x);
});

选择1选项1值1
选择2选项1值1

您可能需要在
实例ID
值中转义
,这样它们就不会被Sizzle解释为类选择器。您当前的代码缺少
+
并且只有一个
​$('[id^='+instanceId+'][id$=typesCle]')
-不确定这是您的实际代码还是复制错误。另外,如果您希望元素的集合
.val()
只针对第一个匹配,那么您可能需要使用
.each()
在ID中使用
不是一个好主意,因为它们在选择器中使用,意味着后面是一个类名。虽然您可以转义它们,但这很不方便。@Barmar:这是spring/thymeleaf生成的id,所以我认为我不能简单地更改它。@jayjaypg22您可以转义选择器中的点,而不是实际的html标识符。只要在您的
实例ID中用
\\.
替换
,它就会工作。您也可以使用
.replace()
。非常感谢您的坚持不懈!