$(“div#myDiv”)。css(“content”)在IE8中返回undefined

时间:2010-03-25 21:46:53

标签: jquery

$("div#myDiv").css("content")在IE8中返回 undefined 。 在其他浏览器和IE6& 7。

3 个答案:

答案 0 :(得分:6)

你确定你不应该这样做:

$('div#myDiv').html() 

$('div#myDiv').text()

这就是我如何获得DIV的“内容”。

请注意,如果您要处理CSS插入的内容,请注意,在IE8中,您需要为文档提供DOCTYPE(reference)。

  

注意:如果指定了!DOCTYPE,则Internet Explorer 8(及更高版本)支持content属性。

答案 1 :(得分:5)

content属性只能与:before:after个伪元素一起用于生成内容:

http://www.w3.org/TR/CSS21/generate.html#content

你所看到的不是content css属性实际做任何事情。您将在小提琴中注意到“hello world”文本未呈现。 Chrome / Firefox /其他浏览器返回的内容只是碰巧接受任意字符串的CSS类的计算值。每个浏览器返回此类值的方式不是规范的一部分,因为这不是它的使用方式。所以所有的赌注都没有了,你不应该“期待”任何事情。浏览器只返回任何内容是完全合理的,因为这不是一个有效的用途,使其成为一种可以忽略的非法风格。

如果您实际将:before:after添加到样式定义中,您会看到它呈现“hello world”:

http://jsfiddle.net/jamietre/X8f6T/42/

您还会看到,无论是通过查看计算的CSS还是使用.text(),您都无法再检索“内容”的值,因为无法使用选择器来定位它。 “content”将文本呈现为样式 - 它不会创建文本节点。您之前只访问了从样式表继承的样式的值;不是DOM中某些东西的价值。

您可以可靠地访问该信息的唯一方法是检查实际样式表:

http://jsfiddle.net/jamietre/X8f6T/45/

这样可以抓住那种风格,并且可以在任何浏览器中使用:

document.styleSheets[document.styleSheets.length-1].rules[0].style.content

当然要在未知的环境中执行此操作,您需要遍历所有样式表和&寻找content属性的样式。

Quirks模式表示content可能适用于没有:before:after的某些浏览器。这是非常过时的信息,但我提到它强调你试图理解为什么在以非法方式使用某些东西时事情不一致。没有理由,除了一些程序员的心血来潮,也不是一个bug,因为它不是任何规范的一部分。

http://www.quirksmode.org/css/content.html

最重要的是,此脚本以非标准方式使用content。所以它在IE中不起作用的事实并不是一个问题,而是 以OP认为应该在其他任何地方运行的方式工作的异常。

答案 2 :(得分:1)

找到一个不寻常的修复。出于某种原因,使用假的css属性IE8突然能够那个

http://jsfiddle.net/X8f6T/25/

在这种情况下,我只使用“ie8”作为css属性,所以我记得它的用途。

免责声明:这是100%的黑客攻击。