仅获取IHTMLElement的DIRECT InnerText

时间:2009-10-29 07:56:08

标签: c# .net browser

考虑以下html代码:

<div id='x'><div id='y'>Y content</div>X content</div>

我只想提取'x'的内容。但是,其innerText属性也包含'y'的内容。我尝试迭代它的 children 所有属性,但它们只返回内部标记。

如何通过IHTMLElement接口仅访问'x'的实际数据?

由于

4 个答案:

答案 0 :(得分:2)

使用类似:

function getText(this) {
    var txt = this.innerHTML;
    txt.replace(/<(.)*>/g, "");
    return txt;
}

因为this.innerHTML返回

<div id='y'>Y content</div>X content

函数getText将返回

X content

也许这会有所帮助。

答案 1 :(得分:1)

使用childNodes集合返回子元素和文本节点 你需要从IHTMLelement QI IHTMLDomNode。

答案 2 :(得分:0)

这是盛建议的最终代码(当然只是样本的一部分):

mshtml.IHTMLElementCollection c = ((mshtml.HTMLDocumentClass)(wbBrowser.Document)).getElementsByTagName("div");
foreach (IHTMLElement div in c)
{
    if (div.className == "lyricbox")
    {
        IHTMLDOMNode divNode = (IHTMLDOMNode)div;

        IHTMLDOMChildrenCollection children = (IHTMLDOMChildrenCollection)divNode.childNodes;

        foreach (IHTMLDOMNode child in children)
        {
            Console.WriteLine(child.nodeValue);
        }
    }
}

答案 3 :(得分:0)

由于innerText()不适用于ie,我猜没有真正的方法。 也许通过以下方式创建内容来尝试服务器端解决问题:

<div id='x'><div id='y'>Y content</div>X content</div>
<div id='x-plain'>_plain X content_</div>

Plain X内容”表示元素的c#生成内容。 现在,您可以通过引用getObject('x-plan')。innerHTML()获得对元素的访问权。