在 jQuery 属性等于值选择器中使用变量作为值

Posted

技术标签:

【中文标题】在 jQuery 属性等于值选择器中使用变量作为值【英文标题】:Using a variable for value inside jQuery attribute-equals-value selector 【发布时间】:2015-01-10 23:26:32 【问题描述】:

我有一个div,其属性为“文件夹名称”,可以是“鞋子”、“连衣裙”等。该 div 如下所示:

<div id='folder_template' class="openclosed_folder_icon subfolder" foldername="shoes">
    <img class="folder_icon" src="images/folder_closed.png"  />
    <div class="folder_label">name</div> 
</div> 

我想搜索具有特定文件夹名称值的 div,并将其中的图像从“folder_closed.png”更改为“folder_open.png”,因此该图形看起来像一个打开的文件夹而不是一个关闭的文件夹。所以我有代码:

$("div[foldername=g.currentGallery]").attr('src','images/folder_open.png'); 

其中 g.currentGallery 是一个保存画廊名称的变量,例如“鞋子”,我想更改它。 但是这一行给了我错误:

语法错误,无法识别的表达式: div[文件夹名=g.currentGallery]

但这需要:

$("div[foldername='shoes']").attr('src','images/folder_open.png');

为什么我不能在这里使用变量?

【问题讨论】:

【参考方案1】:

像这样:

$('div[foldername="' + g.currentGallery.replace(/"/g, '\\"') + '"]').attr(/* whatever */);

如果我们有示例:

var g =  currentGallery: 'shoes["1"]' ;

那么选择器表达式就变成了:

div[foldername="shoes[\"1\"]"]

【讨论】:

这将允许任何字符,甚至是]..foldername='" + g.currentGallery + "']... ...参见:jsfiddle.net/fiddleyetu/k0976349@salmanA? @PeterKA:是的,当] 出现在属性值中时,引号就变得必要了。修改了答案。 +1 用于字符串中的引号转义。无论如何,总是引用永远不会有坏处。 :) 我的代码没有任何引号可以转义,所以简化的解决方案是 $('div[foldername="' + g.currentGallery + '"]').find('img').attr('src','images/folder_open.png'); 谢谢

以上是关于在 jQuery 属性等于值选择器中使用变量作为值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jquery 检查变量选择器中的属性?

jQuery--属性选择器

JQuery 选择器中的变量不起作用

jQuery 属性名称选择器中的通配符?

如何在 jQuery 选择器中使用 JavaScript 变量?

jQuery - 从选择器中排除具有特定值的输入