jquery - 更改后按数据属性选择元素

标签 jquery html jquery-selectors custom-data-attribute

我有很多具有预定义属性 data-key="foo" 的元素。现在更新此元素值后,我还更新了它的 data-key 属性 ($(this).data('key', 'boo');)。之后,我无法再使用选择器 [data-key="boo"] 选择它。我在这里做错了什么?
我不想再次循环所有元素并检查它的 data-key 属性值。 据我了解 :data(key)选择器不能通过键和值选择元素?

$(document).ready(function() {
  $('[data-key="foo"]').data('key', 'boo');

  setTimeout(function() {
    $('[data-key="boo"]').css('color', 'green');
    $('#element').append(' - Now it must be green, because data-key now is ' + $('#element').data('key'));
  }, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-key="foo" id="element">MAKE THIS GREEN</div>
<div data-key="boo" >data-key="boo" by default...</div>

最佳答案

当使用 .data() 时,它使用 $.cache 存储在内部缓存中 不带属性。因此,当使用属性值选择器时,只会选择一个元素。

你可以通过这些帖子

  1. How does jQuery .data() work?
  2. Where is jQuery.data() stored?

如果你想使用属性来选择元素然后使用 .attr() 而不是 .data()

$(document).ready(function() {
  $('[data-key="foo"]').attr('data-key', 'boo');

  setTimeout(function() {
    $('[data-key="boo"]').css('color', 'green');
    $('#element').append(' - Now it must be green, because data-key now is ' + $('#element').data('key'));
  }, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-key="foo" id="element">MAKE THIS GREEN</div>
<div data-key="boo" >data-key="boo" by default...</div>


但是,如果您仍想使用 .data(),则可以使用 .filter() 来识别元素。

$('[data-key="foo"]').data('key', 'boo');
setTimeout(function() {
  $('[data-key]').filter(function(){
    return $(this).data('key') == 'boo';
   }).css('color', 'green');
}, 1000);

$(document).ready(function() {
  $('[data-key="foo"]').data('key', 'boo');

  setTimeout(function() {
    $('[data-key]').filter(function(){
      return $(this).data('key') == 'boo';
     }).css('color', 'green');
    $('#element').append(' - Now it must be green, because data-key now is ' + $('#element').data('key'));
  }, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-key="foo" id="element">MAKE THIS GREEN</div>
<div data-key="boo" >data-key="boo" by default...</div>

关于jquery - 更改后按数据属性选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32134239/

相关文章:

javascript - 为 HTML 链接调用 JavaScript 函数

javascript - 如何从函数中删除 jquery 过滤器

css - 如何将 CSS3 解析器与 HtmlUnitDriver 一起使用

javascript - HTML 表单不会创建新条目

javascript - 为什么我的功能中的警报不起作用?

javascript - 将多个 jQuery 对象作为数组传递

javascript - Jquery中的div通过append函数以指数方式添加

javascript - 解析 json 编码的数组并获取值

javascript - 缩放移动网站上的图像以适合屏幕

javascript - 使用 jQuery .html() 时 IE8 会追加