用IHTMLElementCollection遍历标签的方法,只能去除标签内的内容,各种事件响应无法去除,请问有什么更好的方法?

解决方案 »

  1.   

    标签删掉,它的事件就清掉了。
    可以用IHTMLElement::put_outerHTML(L"") 或者 IHTMLDOMNode::removeChild 来删除标签
      

  2.   

    不知为什么,如果从IHTMLELEMENTCOLLECTION获取IHTMLELEMENT,就不能遍历所有的标签,经过的标签可以清除得很干净,但总有些标签没有遍历到,而用IHTMLELEMENTCOLLECTION获取的IHTMLScriptElement却可以遍历所有脚本标签,LS大哥知道是怎么回事吗?
      

  3.   

    干嘛清除呢?  如果你是想禁止JS的话  直接禁止JS就是的啦
      

  4.   

    我这样遍历:
    <IHTMLDocument2> pDoc;
    <IHTMLElementCollection> pCollect;pDoc->get_all(&pCollect);
    pCollect->get_length(&lNum);
    for (int i = 0; i < lNum; i++)
    {
        CComPtr<IDispatch> pDis;
        CComPtr<IHTMLElement> pElem;    pCollect->item(varName, varIndex, &pDis);    if (NULL == pDis)
        {
    continue;
        }    pDis->QueryInterface(IID_IHTMLElement, (void**)&pElem);
        pElem->get_tagName(&bsTag);    CString szTag = bsTag    if (0 == szTag.CompareNoCase("SCRIPT")
        {
            pElem->put_outerHTML(L"");
        }
    }会遇到,当i = 2的时候,pElem却指向第三个脚本元素,于是在i = 3的时候,会进入continue,结果第二个脚本元素就保留在网页中了,而先用pCollect->tags()获取script的IHTMLElementCollection,然后获取IHTMLScriptElement却不会出现这种情况。