$("div#myDiv").css("content")在IE8中返回undefined

Nig*_*ois 1 jquery

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

tva*_*son 6

你确定你不应该这样做:

$('div#myDiv').html() 
Run Code Online (Sandbox Code Playgroud)

要么

$('div#myDiv').text()
Run Code Online (Sandbox Code Playgroud)

这就是我如何获得DIV的"内容".

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

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


Jam*_*rgy 5

content属性仅应与with :before:afterpseudoelements一起使用以生成内容:

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

你所看到的不是contentcss属性实际做任何事情.您将在小提琴中注意到"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
Run Code Online (Sandbox Code Playgroud)

当然,要在未知的上下文中执行此操作,您需要遍历所有样式表和样式以查找content属性.

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

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

底线是,此脚本content以非标准方式使用.因此它在IE中不起作用的事实并不是一个问题,相反,它确实以OP认为应该在其他任何地方运行的方式起作用.