如何设置 Tag in live HTMLDocument with quotes around it?的属性值

问题描述 投票:0回答:2

基本上,我想要做的就是将属性的值(例如A锚标记的TARGET属性)更改为“_TOP”(如果属性存在),如果它不存在,(如果IsNull返回True)然后我只创建属性并将值设置为“_TOP”。

问题是,它几乎总是设置它没有引号围绕它,即使我尝试通过设置.value = Chr(34)&“_ TOP”&Chr(34)设置它,然后它做的是它设置SINGLE在我放置的引号周围引用(这就像一个糟糕的笑话)并在HTML中显示为'"_TOP"'(lol),如果我正常设置它,它只是保存为<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"

我已经改变了上面的变量名称并将变量变成了字符串(“目标”)等,以便更容易阅读任何人阅读。

我浪费了大量的时间,MSDN文档和往常一样可怕,没有关于这个东西的真实文档或教程。我甚至尝试使用.nodeValue而不是.value来进行设置,但没有任何区别。此外,我已经尝试(在Else部分)删除属性并重新创建+从头开始重新添加它以查看这是否会产生影响,但事实并非如此。

当然,引号很重要,因为如果您尝试对此元素执行操作(调用方法)或稍后使用它,您将得到可怕的“未指定的错误”。我通过VB6中的WebBrowser控件执行此操作,但同样的原则应该适用于所有... C#/。NET / JavaScript等,因为它似乎与DOM相关)。

任何人的想法?已经有2天多了,感谢所有花时间阅读此内容的人。

更新:自发布以来,我们意识到如果我们以大写形式传递属性名称,那么该值将以双引号保存。虽然这不是一个真正的解决方案(只是一个临时的解决方案),但我仍然在寻找答案,如果有人有一个并接受你在这篇文章中对此有任何想法。但是,临时解决方案创建了另一个子问题,即关于使用此临时解决方案产生的问题的帖子。与此临时解决方案相关的子问题位于以下链接,供那些可能认为有用或有趣的人阅读,以及那些希望进一步为此讨论做出贡献的人:Must pass uppercase to set MSHTML element attribute (.setAttribute) correctly, why? And CaseInsensitive .setAttribute doesn't work

c# javascript vb.net vb6 webbrowser-control
2个回答
0
投票

这样的事情似乎有效。

http://jsfiddle.net/fak4b/

var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
    console.log(links[i].getAttribute('target'));
    if (links[i].getAttribute('target') != '_TOP') {
        links[i].setAttribute('target', '_TOP');
    }
}

0
投票

生活黑客:在属性值之前放置一个或多个空格。

例:

var head   = webBrowser.Document.GetElementsByTagName("head")[0];
var metaEl = webBrowser.Document.CreateElement("meta");

metaEl.SetAttribute("HTTP-EQUIV", "X-UA-Compatible");
metaEl.SetAttribute("CONTENT"   , " IE=11"         ); // <= one white-space before attribute value.

head.AppendChild(metaEl);
© www.soinside.com 2019 - 2024. All rights reserved.