【问题标题】:Using a variable for value inside jQuery attribute-equals-value selector在 jQuery 属性等于值选择器中使用变量作为值
【发布时间】: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');

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

【问题讨论】:

    标签: javascript jquery variables jquery-selectors css-selectors


    【解决方案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'); 谢谢
    猜你喜欢
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多