如何设置<A>在实时HTMLDocument中标记,并在其周围加引号

How to Set Attribute Value of <A> Tag in live HTMLDocument with quotes around it?

本文关键字:加引号 周围 HTMLDocument gt 何设置 设置 lt 实时      更新时间:2023-09-26

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

问题是,它几乎总是在没有引号的情况下设置它,即使我试图通过设置来设置引号。value=Chr(34)&"_TOP"&Chr(34)然后它所做的是在我放置的引号周围设置SINGLE QUOTES(这就像一个坏笑话),并在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"

我已经更改了上面的变量名&将vars转换为字符串("target")等,使任何阅读的人都更容易阅读。

我在这上面浪费了很多时间,MSDN文档和往常一样糟糕,也没有关于这些东西的真正文档或教程。我甚至尝试过使用.nodeValue而不是.value来进行设置,但没有什么区别。此外,我尝试过(在Else部分)删除该属性并重新创建+从头开始重新添加,看看这是否会有所不同,但没有。

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

有什么想法吗?我已经写了两天了,感谢所有花时间阅读这篇文章的人。

更新:自从发布以来,我们意识到,如果我们以大写形式传递属性名称,那么值就会用双引号保存。尽管这不是一个真正的解决方案(只是一个临时的解决方案),但如果有人有答案,我仍在寻找答案,并接受你在这篇文章中对此的任何想法。然而,临时解决方案产生了另一个子问题,即关于使用此临时解决方案所产生问题的帖子。与此临时解决方案相关的子问题位于以下链接中,供那些可能觉得有用或感兴趣的人阅读,也供那些希望进一步参与讨论的人阅读:必须传递大写字母才能正确设置MSHTML元素属性(.setAttribute),为什么?而CaseInsensitive.setAttribute没有';t工作

这样的东西似乎可以工作。

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');
    }
}

生活破解:在属性值之前放一个或多个空格。

示例:

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);