为什么element.getAttribute(“style”)忽略冒号“:”字符后的所有内容?仅返回部分值

时间:2012-03-08 12:56:18

标签: c# javascript vb.net dom attributes

基本上,我设置了我的DOM对象,并在IMG元素上调用.getAttribute方法,该元素定义如下:

<IMG style="WIDTH: 134px; HEIGHT: 75px;" src="...">

假设hElement是对上面元素的对象引用,当我调用以下内容时:

MsgBox hElement.getAttribute("style")

我得到以下返回:仅“WIDTH”,即:忽略:字符后面的部分。要添加到此,如果我在IMG元素上执行hElement.getAttribute(“width”),它将实际宽度返回为“134”,即使我没有明确地定义了width =“...”属性。所以,基本上,我问,我怎样才能确保我在写入时得到回报,而不是因为它们被IE重建和存储,因为它似乎是用推断的WIDTH属性做的。此外,不确定为什么它忽略了包括和在WIDTH旁边的:字符之后的所有内容 - 我怎样才能正常工作?

奇怪的是,如果我执行以下操作,它会显示应有的一切:

hElement.outerHTML

style属性的值如上所示。如果我必须解析.outerHTML以获得正确的读数,那就会令人​​沮丧 - 我对MS的半生不熟的努力感到非常失望。如果你正在寻找额外阅读的东西,请随意参考另一个问题,我注意到在使用大写字母时返回奇怪行为的属性以及何时没有(通过黑客解决)。

我正在使用VB6,但它完全相同,mshtml.dll,我收集,我使用IHTMLElement定义hElement,不确定我是否应该使用其他东西,但我认为IHTMLElement对IE6 +有好处...?

更新:

如果我将hElement声明为IHTMLElement5或IHTMLElement6,那么它就像预期的那样工作。如果我使用以下任何一个,它不起作用:IHTMLElement,IHTMLElement2,IHTMLElement3和IHTMLElement4。因为它只有6,只有5&amp; 6工作。看起来好像以后为较新版本的IE添加了这些,虽然你没有在2及以上的intellisense中看到.getAttribute对象,你仍然可以出于某种原因使用它(不确定它是否基于IE版本)已安装)。有谁知道IE IHTMLElement5和IHTMLElement6代表什么版本?如何获得IE6 +的一致行为,因为我无法控制客户端上安装的版本。如果我使用IHTMLElement5或IHTMLElement6这是否意味着它不适用于IE6客户端?

更多: 原来IHTMLElement5用于IE8 +而IHTMLElement6用于IE9 + - 关于如何获得IE6 +一致行为的任何想法或建议?感谢。

UPDATE2:我添加了一个新问题,该问题源于此问题,可以在此处找到感兴趣的人: What happens when using IHTMLElement5/6 (for IE8/9) in IE6/7? Does it divert to IHTMLElement behaviour?

2 个答案:

答案 0 :(得分:2)

您可能想看一下这个http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element/

在你的情况下你应该尝试使用cssText属性,该属性将返回一个由所有css属性组成的字符串

hElement.style.cssText

答案 1 :(得分:1)

标志不再受支持了吗? http://msdn.microsoft.com/en-us/library/ms536429%28v=vs.85%29.aspx

然而,这有效:

styleContent=hElement.style.cssText;

似乎getAttribute('style')返回一个对象而不是属性的值,因为下面的代码也可以。

styleContent=hElement.getAttribute('style').cssText;