涉及祖先中数据-*值的CSS规则在数据-*值更改时与IE不起作用
@重复标志:问题与旧问题相似,但不同。首先,他的问题是IE8,在IE9、10和11中得到了解决。我的是IE 10和11 我在下面有一个赤裸裸的概念验证页面来展示我在说什么 基本上,我正在尝试使用HTML5 data-*属性来增强页面的语义,并使用css规则来设计显示样式,而不是使用javaScript的显示/隐藏逻辑 下面的代码在Firefox/Chrome中运行良好,但在InternetExplorer10和11中失败 我想我可以使用父类中的类来获得类似的行为,但HTML5属性似乎更适合于此,我无法让它们与IE bug一起工作 有什么见解吗涉及祖先中数据-*值的CSS规则在数据-*值更改时与IE不起作用,css,html,internet-explorer,Css,Html,Internet Explorer,@重复标志:问题与旧问题相似,但不同。首先,他的问题是IE8,在IE9、10和11中得到了解决。我的是IE 10和11 我在下面有一个赤裸裸的概念验证页面来展示我在说什么 基本上,我正在尝试使用HTML5 data-*属性来增强页面的语义,并使用css规则来设计显示样式,而不是使用javaScript的显示/隐藏逻辑 下面的代码在Firefox/Chrome中运行良好,但在InternetExplorer10和11中失败 我想我可以使用父类中的类来获得类似的行为,但HTML5属性似乎更适合于此,
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<style>
.Container[data-Verbose="Yes"] .NotVerbose
{
display: none;
}
.Container[data-Verbose="No"] .Verbose
{
display: none;
}
</style>
</head>
<body>
<div class="Container" data-Verbose="Yes">
<a class="Verbose">Not Verbose Please</a>
<a class="NotVerbose">Verbose Please</a>
<p class="Verbose">*Long Paragraph*</p>
<p class="NotVerbose">*Short Sentence*</p>
</div>
<script src="jquery-1.11.1.min.js"></script>
<script>
jQuery(document).on('click', '.Container a', function(Event) {
var Target = jQuery(this);
console.log(Target);
if(Target.is('.Verbose'))
{
jQuery('.Container').attr('data-Verbose', 'No');
}
else if(Target.is('.NotVerbose'))
{
jQuery('.Container').attr('data-Verbose', 'Yes');
}
});
</script>
</body>
</html>
.Container[data Verbose=“Yes”].NotVerbose
{
显示:无;
}
.Container[data Verbose=“No”].Verbose
{
显示:无;
}
请不要啰嗦
请长篇大论
*长段落*
*短句*
jQuery(文档).on('click','Container a',函数(事件){
var Target=jQuery(this);
控制台日志(目标);
if(Target.is('.Verbose'))
{
jQuery('.Container').attr('data-Verbose','No');
}
else if(Target.is('.NotVerbose'))
{
jQuery('.Container').attr('data-Verbose','Yes');
}
});
我在控制台中使用了IE的“文档模式”,上面的示例仅在IE 9中正常运行(但在其他版本中没有)。还值得一提的是,即使IE 9在使用data-*属性的一组更复杂的CSS规则中也会出现错误行为,因此在某些情况下,将以下内容放在头脑中以强制IE表现为IE 9可能会起作用,但这并不是一个可靠的解决方法:
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
正如我之前的其他人所概述的那样,问题在于IE在某些情况下无法正确地重新绘制数据-*被更改,这一问题在IE 8中报告过,并且在更复杂的css规则的后续版本中似乎仍然存在
之前概述的解决方案是将样式更改为受影响元素的某个默认值(即不透明度为1),以强制重画,但是,当样式属性重置为相同的值时,IE的更高版本中的优化似乎不会重新绘制,这使得上述解决方案无法运行,除非您可以找到一个css属性,该属性具有两个不同的值,不会影响您的显示
要始终强制重新绘制,一个更可靠的解决方案是在修改了data-*属性的元素上添加和删除任意类
可以在以下位置找到一个方便的jQuery.attr setter包装器来修复此问题:
vs-因此,没有通过更改
data-*
attribute初始化重画也是同样的问题,您似乎是对的。这是同样的根本问题。但是,您的答案更好,因为类更改似乎总是强制重新绘制,而另一个问题中的不透明度更改仅强制第一次重新绘制。此外,他们在另一个问题中暗示问题是用IE9+解决的,这只是部分正确。另一个问题中由实现引起的问题在IE9+中已修复,但由我的实现引起的问题仍然存在。因此,我相信这里提供的信息是对另一篇文章的必要补充