Почему element.getAttribute ("style") игнорирует все после символа двоеточия ":"?Возврат только части значения - PullRequest
0 голосов
/ 08 марта 2012

В основном, мои объекты DOM настроены, и я вызываю метод .getAttribute для элемента IMG, который определен следующим образом:

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

Предполагая, что hElement является ссылкой на объект вышеупомянутого элемента, когда явызовите следующее:

MsgBox hElement.getAttribute("style")

Я получаю следующее возвращаемое значение: только "ШИРИНА", то есть: часть, включающая и после: символ игнорируется.Чтобы добавить к этому, если я делаю hElement.getAttribute ("width") для элемента IMG, он возвращает фактическую ширину как "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, и хотя вы не видите объект .getAttribute в intellisense в 2 и выше, вы все равно можете использовать его по какой-то причине (не уверен, если он основан на какой версии IEустановлено).Кто-нибудь знает, что означает IE IHTMLElement5 и IHTMLElement6?Как я могу получить согласованное поведение для IE6 +, поскольку у меня нет контроля над тем, какие версии установлены на клиентах.Если я использую IHTMLElement5 или IHTMLElement6, значит ли это, что он не будет работать на клиентах IE6?

Подробнее: получается, что IHTMLElement5 предназначен для IE8 +, а IHTMLElement6 - для IE9 + - есть идеи или рекомендации о том, как получить согласованное поведение для IE6 +?Спасибо.

ОБНОВЛЕНИЕ2: я добавил новый вопрос, который возникает из этого вопроса, его можно найти здесь для тех, кто заинтересован: Что происходит при использовании IHTMLElement5 / 6 (для IE8 / 9) в IE6/ 7?Отклоняет ли это поведение IHTMLElement?

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Возможно, вы захотите взглянуть на это http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element/

Так что в вашем случае вы должны попробовать использовать свойство cssText, которое будет возвращать строку, состоящую из всех свойств css

hElement.style.cssText
1 голос
/ 08 марта 2012

Флаги больше не поддерживаются? http://msdn.microsoft.com/en-us/library/ms536429%28v=vs.85%29.aspx

Однако это работает:

styleContent=hElement.style.cssText;

Кажется, что getAttribute('style') возвращает объект вместо значения атрибута, поскольку приведенный ниже код тоже работает.

styleContent=hElement.getAttribute('style').cssText;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...