item的第一个参数一般用代表整数的索引

//这个item方法真是复杂啊。。头文件里声明是 name,index,idispath 第一个参数是名字啊,为什么是实际应用中会是整数呢?

 

小弟被这个问题困了很久了,请达人指点一二。
我已经得到了IHTMLDocument2指针,根据它里面的方法可以得到Body,可是我想得到DIV,并根据DIV的属性来阻止它的显示(目的是拦截浮动窗口)问题:
1.我不知道怎么得到DIV
2.得到DIV以后我应该怎么修改它的属性。
我用以下方法尝试但不行。

C/C++ code
// pDoc为IHTMLDocument2的指针 CComPtr < IHTMLElementCollection > spAll; hr = pDoc -> get_all( & spAll); CComVariant varID = LPCOLESTR( " div " ); CComPtr < IDispatch > lpDisp; long nlen; spAll -> get_length( & nlen); CComPtr < IHTMLElement > item; for ( int i = 0 ; i < nlen; ++ i ) { hr = spAll -> item(varID, CComVariant(i), & lpDisp); if ( SUCCEEDED(hr) && lpDisp != NULL ) // 在这里lpDisp永远都是NULL { hr = lpDisp -> QueryInterface( /* IID_IHTMLElement, */ & item ); if ( SUCCEEDED(hr) && item != NULL ) { // 处理 } } }


请高手指点
---------回复--------------
用法错误,spAll->item的第一个参数一般用代表整数的索引,例如CComVariant((long)0),第二个参数可以随便设置,如果第一个参数用字符串,则不能用"div",这是标签名,字符串内容应该是id或者name属性值,比如 <div id='abc'>或者 <div name='abc'>。
你上面的代码既然是放到循环里了,则应该用数字索引来检索:
hr = spAll->item(CComVariant((long)i), CComVariant(), &lpDisp);
CComQIPtr <IHTMLElement> spElement = lpDisp;
CComBSTR tagName;
spElement->get_tagName(&tagName);
if (tagName == CComBSTR("DIV"))
{
  // 现在如果需要更进一步定位,则按照需求来做,比如查看DIV的某个属性是否匹配,或者某个style属性是否匹配
}

如果div元素有ID或者NAME属性,那么定位方法不需要那么复杂,只需要调用
IHTMLDocument2::QueryInterface --> IHTMLDocument3
IHTMLDocument3::getElementById(L"someid", ...) --> IHTMLElement 在这里就能直接得到id='someid'的元素
---------回复--------------
varID应该是索引值或id属性或name属性值, 不是tag name

---------回复--------------
可是我在执行hr = spAll->item(varID, CComVariant(0), &lpDisp);这一句的时候有的时候会出错,有时就正常,错误提示是“iexplore.exe has triggered a breakpoint”
请问这又是怎么回事?
---------回复--------------
那肯定就是这句话引发的中断,你看下&lpDisp值是什么,是空?还是什么呢?检查一下!
---------回复--------------
出错的问题目解决,原因是没有调用它的Release()方法。每得到一个指针后不用的时候调用它的lpDisp.Release();就没问题了
---------回复--------------
CComPtr <IDispatch> lpDisp;
CComVariant varID(i);
hr = spAll->item(varID, CComVariant(0), &lpDisp);
CComPtr <IHTMLElement> item = lpDisp;
使用这种方法得到一个DIV的IHTMLElement以后,使用item->put_outerHTML(L"");方法,但是在网页里面“查看-》源码”里面,这个DIV还是存在,我用什么方法可以把这个DIV删除
---------回复--------------
查看网页源码查看的是原始下载的网页内容,不是动态改变的内容,无论DOM发生了什么改变,查看源码总是不变的,但是浏览器显示的内容是DOM改变后的

 

转载于:http://www.khgl.cn/html/02/n-1222902.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值