В сущности, все, что я пытаюсь сделать, это изменить значение атрибута (такого как атрибут TARGET тега привязки A) на «_TOP», если атрибут существует, если он не существует (если IsNullвозвращает True), тогда я просто создаю атрибут и устанавливаю значение "_TOP".
Проблема в том, что он почти всегда устанавливает его без кавычек, и даже если я пытаюсь установить его с кавычками, установив.value = Chr (34) & "_TOP" & Chr (34), то, что он делает, это устанавливает ЕДИНСТВЕННЫЕ ЦИТАТЫ вокруг кавычек, которые я помещаю (это как плохая шутка) и появляется в HTML как '"_TOP"'
(смеется)и если я установлю его как обычно, он просто сохранится как <a href="..." target=_TOP>some link</a>
(без кавычек).
Dim attTargetAttribute As IHTMLDOMAttribute2 ' IHTMLDOMAttribute2 is the IE6.0+
' interface of the IHTMLDOMAttribute (which is I think IE5.5) it goes up to 4.
' aHtmlElement is just a valid/working/tested IHTMLElement ive set earlier.
' just a simple "A" / Anchor tag <A href="...">.
If IsNull(aHtmlElement.Attributes.getNamedItem("target")) Then
Set attTargetAttribute = aHtmlElement.ownerDocument.createAttribute("target")
aHtmlElement.Attributes.setNamedItem attTargetAttribute
Else
Set attTargetAttribute = aHtmlElement.Attributes.getNamedItem("target")
End If
attTargetAttribute.value = "_TOP"
Я изменил вышеуказанные имена переменных и превратил переменные в строки ("target") и т. д., чтобы сделатьчитать легче для любого, кто читает.
Я потратил кучу часов на это, документы MSDN, как обычно, ужасны, реальной документации или учебников по этому материалу тоже нет.Я даже пытался использовать .nodeValue вместо .value для настройки, но без разницы.Кроме того, я попытался (в разделе «Другое») удалить атрибут и заново создать + заново добавить его с нуля, чтобы увидеть, изменит ли это что-то, но это не помогло.
Конечно,кавычки важны, потому что если вы попытаетесь выполнить действие (вызвать метод) над этим элементом или использовать его позже, вы получите страшную «неопределенную ошибку».Я делаю это с помощью элемента управления WebBrowser в VB6, но тот же принцип должен применяться везде ... C # / .NET / JavaScript и т. Д., Как это, похоже, связано с DOM).
Любые идеи кто-нибудь?Занимаясь этим уже более 2 дней, спасибо всем, кто нашел время, чтобы прочитать это.
ОБНОВЛЕНИЕ: с момента публикации мы поняли, что если мы передадим имя атрибута в верхнем регистре, затем значение сохраняется с двойными кавычками вокруг него.хотя это не реальное решение (только временное), я все еще ищу ответы, если у кого-то есть, и принимаю любые мысли, которые у вас могут возникнуть по этому поводу в этом посте.Тем не менее, временное решение создало другой подвопрос, являясь сообщением о проблемах, возникающих при использовании этого временного решения.Подвопрос, связанный с этим временным решением, расположен по следующей ссылке для тех, кому может быть полезно или интересно прочитать о них, а также для тех, кто хотел бы внести свой вклад в дальнейшее обсуждение: Необходимо указать заглавные буквы для установки элемента MSHTML.атрибут (.setAttribute) правильно, почему?И CaseInsensitive .setAttribute не работает