涉及祖先中数据-*值的CSS规则在数据-*值更改时与IE不起作用

涉及祖先中数据-*值的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属性似乎更适合于此,

@重复标志:问题与旧问题相似,但不同。首先,他的问题是IE8,在IE9、10和11中得到了解决。我的是IE 10和11

我在下面有一个赤裸裸的概念验证页面来展示我在说什么

基本上,我正在尝试使用HTML5 data-*属性来增强页面的语义,并使用css规则来设计显示样式,而不是使用javaScript的显示/隐藏逻辑

下面的代码在Firefox/Chrome中运行良好,但在InternetExplorer10和11中失败

我想我可以使用父类中的类来获得类似的行为,但HTML5属性似乎更适合于此,我无法让它们与IE bug一起工作

有什么见解吗

<!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+中已修复,但由我的实现引起的问题仍然存在。因此,我相信这里提供的信息是对另一篇文章的必要补充