Javascript 如何在IE9剥离之前获取样式属性值
我试图在IE9-10去除无效值之前获取style属性的值。到目前为止,我已经尝试了下面的每一种变化-Javascript 如何在IE9剥离之前获取样式属性值,javascript,css,internet-explorer,internet-explorer-9,inline-styles,Javascript,Css,Internet Explorer,Internet Explorer 9,Inline Styles,我试图在IE9-10去除无效值之前获取style属性的值。到目前为止,我已经尝试了下面的每一种变化- $0.attributes.style $0.style $0.getAttribute('style') 但是,如果我试图设置一个无效的值,我似乎无法访问它- <div style="display: none; color: ${fake-value}"> </div> 由于IE9-10去除了无效值,上述所有操作只会返回display:none 请注意,我已经
$0.attributes.style
$0.style
$0.getAttribute('style')
但是,如果我试图设置一个无效的值,我似乎无法访问它-
<div style="display: none; color: ${fake-value}">
</div>
由于IE9-10去除了无效值,上述所有操作只会返回display:none
请注意,我已经尝试了大量的变体,因此,如果不可能,那么这很好,但是您是否尝试过或者是否可以尝试,除非确认答案可以执行某些操作,否则答案不会有多大帮助:)您能否在元素上使用自定义属性来保存“无效”数据?比如
然后,也许你可以使用Javascript,将其添加到样式中 这完全是开箱即用的,但是如果您只需要读取属性,为什么不使用outerHTML并从中获取值,比如:
var a = document.getElementById('myDiv').outerHTML;
var i = a.search('color:');
var e = a.lastIndexOf('"');
var result = a.substr(i+6,e - (i+6));
alert(result);
编辑1:
由于前面的答案不起作用,我尝试了一些其他的选择,我唯一能够在样式
标签中添加内容的方法是:
style="display:none; -ms-custom: test;"
编辑2
如果你需要添加一个没有被IE剥离的自定义样式,你可以在它前面添加
-ms-
,只有IE会读取它,因为它是-ms
,所以它是安全的嗯……我想你需要对该元素使用ng样式。Ng样式将以不同的方式进行评估,并在评估之后使用适当的值填充元素的样式。通常,您会在相应的角度指令中放置一个经过计算的元素。在你的情况下,这就是ng风格
例如,
将添加正确的样式,然后添加已评估的样式 不幸的是,由于IE9实现CSS对象模型规范的方式,这是不可能的
如果我们看一下规范,我们可以假设发生了以下情况(我的重点):
解析给定属性的CSS值意味着遵循以下步骤
步骤:
- 让list是通过调用parse组件列表返回的值 价值来自价值
- 根据CSS中属性的语法匹配列表 规格
- 如果上述步骤失败,则返回
null
- 返回列表
null
,基本上在解析时忽略该属性,然后将其显示在DOM中
尽管您已经提到不想这样做,但我再次建议您使用数据属性,这将为您提供一个跨平台的解决方案:
<div style="display: none;" data-color="${fake-value}">
如果您确实无法使用数据属性,另一种选择是以编程方式查看页面的源代码,并根据指定的值对其进行解析。我不建议这样做,但如果这是一个你希望探索的途径,你可以找到一个相关的问题
更新: 有趣的是,如果我们查看DOM规范,我们会发现: 而一个实现可能无法识别一个应用程序中的所有CSS属性 CSS声明块,它将提供对所有 在样式表中通过 cssstyle声明接口 因此,作为对我之前答案的更新,我推测IE9错误地解释了规范——在DOM解析期间使用CSSOM
return null
实现(或类似的实现),而不是预期的DOM实现
这就解释了为什么在其他浏览器中会得到预期的结果。请注意,如果查看源代码,您仍然可以看到剥离的属性值,因此希望IE9中有一些钩子。为什么需要存储假颜色值?为什么不改用数据属性呢?因为我们不想构建像
ng style
这样的属性。大多数框架都允许在属性值中插入字符串,只有IE才适合styleNo,正如前面提到的,我们不想这样做。这不起作用,请确保在尝试答案之前suggedting@PWKad我更新了我的答案,请尝试告诉我们helped@PWKad:我真的不在乎分数,但是,如果你投票否决了人们,他们仍然回复你,至少检查答案并取消你的否决。实际上,所有浏览器都会忽略以-
开头的样式,并且这些样式是不可接受的样式声明。当然:。这不是棱角分明的,因此ng样式在这里对我们没有任何帮助。评论不用于扩展讨论;这段对话已经结束。