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

标签 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 属性所做的操作。另外,不知道为什么它会忽略宽度旁边的 : 字符及其之后的所有内容 - 我怎样才能使其正常工作?

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

hElement.outerHTML

样式属性的值如上面定义的那样显示。如果我必须解析 .outerHTML 才能获得正确的读数,那只会令人沮丧 - 我对 MS 半生不熟的努力感到非常失望。如果您正在寻找额外的内容来阅读,请随时引用我注意到的另一个问题,即属性在使用大写字母和不使用大写字母时返回奇怪的行为(通过黑客解决)。

我正在使用 VB6,但它都是一样的,mshtml.dll,我收集,我正在使用 IHTMLElement 来定义 hElement,不确定我是否应该使用其他东西,但我认为 IHTMLElement 对于 IE6+ 有好处...?

更新:

如果我将 hElement 声明为 IHTMLElement5 或 IHTMLElement6,那么它会按预期工作。如果我使用以下任何一个,它都不起作用:IHTMLElement、IHTMLElement2、IHTMLElement3 和 IHTMLElement4。由于最多只能达到 6 个,因此只有 5 和 6 可以工作。似乎这些是后来为较新版本的 IE 添加的,尽管您在 2 及以上版本的 intellisense 中看不到 .getAttribute 对象,但出于某种原因您仍然可以使用它(不确定它是否基于哪个 IE 版本)已安装)。有谁知道IE IHTMLElement5和IHTMLElement6代表什么版本?我如何才能获得 IE6+ 的一致行为,因为我无法控制客户端上安装的版本。如果我使用 IHTMLElement5 或 IHTMLElement6 是否意味着它无法在 IE6 客户端上运行?

更多: 结果 IHTMLElement5 适用于 IE8+,IHTMLElement6 适用于 IE9+ - 关于如何为 IE6+ 获得一致的行为有什么想法或建议吗?谢谢。

更新2:我添加了一个新问题,该问题是从这个问题衍生出来的,感兴趣的人可以在这里找到它: What happens when using IHTMLElement5/6 (for IE8/9) in IE6/7? Does it divert to IHTMLElement behaviour?

最佳答案

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

因此,在您的情况下,您应该尝试使用 cssText 属性,它将返回一个包含所有 css 属性的字符串

hElement.style.cssText

关于c# - 为什么 element.getAttribute ("style") 忽略冒号 ":"字符之后的所有内容?仅返回部分值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9617995/

相关文章:

javascript - .js 文件中的随机字符

javascript - 主干 View 渲染如何工作?

javascript - 在 jQuery 中连续滚动 Div

c# - 监视 Windows 上字体的安装/卸载

html - 使用 CSS 和 HTML 设计 VB.net 表单的样式?

c# - 将 base64 字符串转换为图像 C# 时出错

c# - 解密AES密文

c# - Discord.Net 1.0 如何使用ModifyAsync/如何修改消息内容

c# - WPF 绑定(bind)不更新数据

.net - 如何使用泛型方法替换重复的属性?