Селектор запросов [data-company]
проверяет атрибуты, а .data
не обновляет их.
Вы можете изменить код для использования только .attr('data-
, избегайте .data
полностью.
Вы можете установить собственную функцию, которая обновляет как данные, так и атрибуты:
// update both data and corresponding attribute 'data-x'
$.fn.attrdata = function (a, b)
{
if (arguments.length > 1)
this.attr('data-' + a, b);
else if (typeof a === 'object')
this.attr(Object.keys(a).reduce(function (obj, key)
{
obj['data-' + key] = a[key];
return obj;
}, {}));
return this.data.apply(this, arguments);
};
Используйте вот так:
$("div").attrdata("company", "Apple");
$("div").attrdata({company: "Apple"}); // also possible
console.log($("div").data("company")); // Apple
console.log($("div").attr("data-company")); // Apple
console.log($("div[data-company='Apple']").length); // 1
Если вы не используете селекторы CSS, вы можете создать свой собственный селектор jQuery:
$.expr[':'].data = function(elem, index, match) {
var split = match[3].split('=');
return $(elem).data(split[0]) == split[1];
};
Используйте вот так:
$("div").attr("data-company", "Microsoft");
$("div").data("company", "Apple");
console.log($('div:data(company=Apple)').length); // 1
console.log($('div[data-company="Apple"]').length); // 0
https://jsfiddle.net/oriadam/a14jvqcw/