运行 如果包含属性值的一部分则执行操作

Run action if contains part of an attr value

我对此有意见

attr('data-disabled-dates','12/02/2022; 13/02/2022; 14/02/2022; 15/02/2022; 10/03/2022; 11/03/2022; 16/02/2022')

还有一个动态生成明天的常量,所以对于这种情况,结果是“16/02/2022”

如果明天的日期在 attr 数据禁用日期范围内,我想 运行 采取行动。

所以我尝试了这个

if (jQuery(input).attr('data-disabled-dates') == '16/02/2022')
        { console.log('work') } else {
    console.log ('not') }

但它只在整个序列完全相同时才给出 true,也就是说,如果我输入“12/02/2022;13/02/2022...”是否会给出结果,但是如果我输入的值在里面,我只希望它为真

您可以使用 String.includes()String.split('; ') 将字符串转换为数组并检查它是否包含所需的值。

if (jQuery(input).attr('data-disabled-dates').includes('16/02/2022')) { 
  console.log('work') 
} else {
  console.log('not') 
}

普通 JS 中的工作示例

const div = document.querySelector('#data');

const dates = div.getAttribute('data-disabled-dates');

if (dates.includes('16/02/2022')) {
  console.log('work')
} else {
  console.log('not')
}


// or
if (dates.split('; ').includes('16/02/2022')) {
  console.log('work')
} else {
  console.log('not')
}
<div id="data" data-disabled-dates="12/02/2022; 13/02/2022; 14/02/2022; 15/02/2022; 10/03/2022; 11/03/2022; 16/02/2022" />

顺便说一句 https://youmightnotneedjquery.com/

== 执行精确的字符串匹配,而不是子字符串匹配。

您可以使用.split()将属性值拆分成数组,然后使用.includes()测试数组是否包含日期。

if (jQuery(input).data('disabled-dates').split('; ').includes('16/02/2022')) {
    console.log("work");
} else {
    console.log("not");
}

indexOf可以大于0,如果需要支持IE,可以使用indexOf

var dataAttrValue = jQuery(input).attr('data-disabled-dates');
var date = '16/02/2022';
if (typeof dataAttrValue !== 'undefined' && dataAttrValue.indexOf(date)) > 0) { console.log('work');
} else {
console.log ('not');
}

jQuery(input).is(“[data-disabled-dates*='16/02/2022']”);

但我建议使用 JQuery 数据来存储和检索元素的值。