在选择器中使用带有data-id属性的变量

时间:2016-09-20 14:37:02

标签: javascript css-selectors

我有一些图像具有如下数据属性:

    <img id="popup" class="Absolute_Center is_Image" alt="Girl Popup" data-picture="">

         <img src="https://s3-us-west-2.amazonaws.com/example.jpg" data-picture = "1">
         <img src="https://s3-us-west-2.amazonaws.com/example2.jpg" data-picture = "2">
         etc...

我想添加一个事件监听器来检索系列中的下一张图片。我想我可以这样做:

var oimgPopup = document.getElementById("popup");


/* retrieve data-picture value of current image showing in the image popup */
var y = oimgPopup.dataset.picture;
     var y = oimgPopup.dataset.picture;
     y = y + 1;
     // Prints out corect data-picture value + 1

     var nextImage = document.querySelector('[data-picture =' + y + ']');
     console.log(nextImage);
     /* SyntaxError: An invalid or illegal string was specified
        var nextImage = document.querySelector('[data-picture =' + y  + ']'); */

我将检索系列中的下一个图像元素对象,然后将其插入到#mypopup图像元素中。但是当我运行它时,我收到一个非法的字符串消息。有谁知道如何将变量合并到querySelector属性选择器中?提前谢谢......

1 个答案:

答案 0 :(得分:3)

当您使用attribute selectors之类的[attr = value]时,

  

属性值必须为CSS identifiersstrings

您没有引用该值,因此将其解析为identifier。然而,

  

在CSS中,标识符[...]不能以数字

开头

因此,您的数字选择器无效。你可以:

  • 逃避价值,例如如果y123则需要\31 23

    document.querySelector('[data-picture =' + CSS.escape(y) + ']')
    
  • 使用字符串,例如如果您知道y不包含引号,

    document.querySelector('[data-picture = "' + y + '"]')