jquery - 浏览器未观察到 data-* 的更改,CSS 属性选择器属性未呈现

标签 jquery css dom rendering custom-attributes

鉴于此 CSS:

[data-myplugin-object="blue-window"]{
    background-color: #00f;
}

[data-myplugin-object="red-window"]{
    background-color: #f00;
}

还有这个 jQuery:

$('[data-myplugin-object="blue-window"]').each(function(event){
    $(this).data({
        'myplugin-object': 'red-window'
    });
});

还有这个 HTML 片段:

<div data-myplugin-object="blue-window">
    <p>Hello world</p>
</div>

现在,人们会期望当 jQuery 片段被执行时(当然会适本地推迟到页面加载完成)我的蓝色窗口(最初呈现为蓝色 ) 会变成红色。

不,当然不是;并分别在 Firefox 和 Chrome 中使用 Firebug 和开发者工具,我无法观察到 data-* 属性有任何变化。

为了让浏览器(和与此相关的 DOM 工具箱)观察变化,我需要恢复到 .attr() 还是有解决方法这个?

最佳答案

jQuery.data() 属性实际上并不存储在 jQuery 中的 DOM 对象上。 DOM 对象标有唯一的 jQuery ID,实际数据存储在单独的 javascript 数据结构中。除了其他原因,jQuery 这样做是为了防止当数据值引用其他 DOM 对象时某些浏览器中可能发生的循环引用内存泄漏错误。

如果您想更改实际的 DOM 属性,我建议您自己直接设置属性,如下所示:

obj.attr("data-myplugin-object", "red-window");

不过,对于您正在做的事情,我认为大多数人会使用添加/删除/更改 CSS 类名,而不是自定义属性,因为这是更改应用于对象的 CSS 规则的常用方法。

<div id="myObj" class="blueWindow">
    <p>Hello world</p>
</div>

.blueWindow {background-color: #00F;}
.redWindow  {background-color: #F00;}

 $("#myObj").removeClass("blueWindow").addClass("redWindow");

或者如果对象上没有其他类:

 $("#myObj").attr("class", "redWindow");

关于jquery - 浏览器未观察到 data-* 的更改,CSS 属性选择器属性未呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7458649/

相关文章:

javascript - 无法通过 javascript 比较日期

html - 继续扩展内容而不是将页脚向下推

jquery - 遍历具有不同索引的表单元素名称数组

javascript - 包装成对的元素?

html - CSS 定位 : Same width in percent, 但一个 div 似乎变小了

javascript - 如何通过 DOM 容器访问 Highcharts 图表?

javascript - jQuery .css 有时不起作用

c# - 在 MVC 操作中隐藏查询字符串

javascript - datatables不加载json(带有对象的数组)

javascript - 如何在 slider 下方添加标题?