属性包含确切的数字选择器,因此找到了 3 但没有找到 13 或 23

attribute contains exact number selector so 3 is found but not 13 or 23

在表格中有一个部分显示每组 4 周 div。见下方代码

<div class="form-check" data-weeknr="1,2,3,4"></div>
<div class="form-check" data-weeknr="5,6,7,8"></div>
<div class="form-check" data-weeknr="9,10,11,12"></div>
<div class="form-check" data-weeknr="13,14,15,16"></div>
<div class="form-check" data-weeknr="17,18,19,20"></div>
... This continues until it reaches 
<div class="form-check" data-weeknr="49,50,51,52"></div>

我有一个代码可以通过变量 weekno 获取当前周,所以今天 console.log(weekno); returns:3

我想将 class current 添加到数据属性 data-weeknr.

中具有 weekno.form-check

所以我尝试使用包含 select 或说明的属性,但我需要它比这些说明允许的更深入。

$links = $(".formplate .form-check[data-weeknr*='3']");
console.log($links.length);

因为上面的 jQuery 代码将在控制台中 return 数字 7 因为它现在抓取每个 .form-check 有一个 3 初始化。所以它不仅抓取了 3,而且抓取了 13,23,[30,31,32],[33,34,35,36],[37,38,39],43,总共 7 组。

那么我怎样才能改变这一行来做两件事:

$links = $(".formplate .form-check[data-weeknr*='3']");

如何合并变量 weekno,我怎样才能正确转义以便允许使用 var? 我怎样才能使它 select 只有数字 3?

仅选择值为 3 的最简单方法是将分隔符也添加到数据属性的开头和结尾,例如

<div class="form-check" data-weeknr=",1,2,3,4,"></div>

然后选择分隔符进入搜索,因为data-weeknr*在数据属性的某处搜索字符串。

$links = $(".formplate .form-check[data-weeknr*=',3,']");

一种方法是使用 $.inArray 。所以,你可以使用 split(",") 这会给你数组 然后比较数组中是否存在 week 值,如果是,则在其中添加 class。

演示代码 :

var week = '11';
var count = 0;
$(".form-check").each(function() { //loop through form check
  var data_ = $(this).data('weeknr').split(","); //get array using split
  //check week is in array
  if ($.inArray(week, data_) !== -1) {
    count++;
    $(this).addClass('current') //add class
  }
})
console.log("Length --" + count)
.current {
  color: red
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="form-check" data-weeknr="1,2,3,4">A</div>
<div class="form-check" data-weeknr="5,6,7,8">B</div>
<div class="form-check" data-weeknr="9,10,11,12">C</div>
<div class="form-check" data-weeknr="13,14,15,16">D</div>
<div class="form-check" data-weeknr="17,18,19,20">E</div>
<div class="form-check" data-weeknr="49,50,51,52">F</div>

我已经创建了以下示例代码来满足您的要求:

var weekno = "3";
$(".form-check").each(function() {
    var dataWeeknr = $(this).attr('data-weeknr');
    if (dataWeeknr.indexOf(',') > -1) {
      var dataWeeknrArr = new Array();
      dataWeeknrArr = dataWeeknr.split(",");
      if(dataWeeknrArr.includes(weekno)) {
          $(this).addClass('current');
      }
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="form-check" data-weeknr="1,2,3,4"></div>
<div class="form-check" data-weeknr="5,6,7,8"></div>
<div class="form-check" data-weeknr="9,10,11,12"></div>
<div class="form-check" data-weeknr="13,14,15,16"></div>
<div class="form-check" data-weeknr="17,18,19,20"></div>
<div class="form-check" data-weeknr="49,50,51,52"></div>