對 HTMLElement, 有 elementFromPoint 可以找出當前點下的 element,但這個elementFromPoint衹能返回非 Text 元素,我想的是返回當前點的 node,如果當前的是 Text 則返回 Text node, 但怎麼沒有 nodeFromPoint 之類的用法?怎樣可以找出當前光標下的 node?
解决方案 »
- 求助!解密函数
- 谁有现成的支持CHECKBOX的 CTreeListCtrl可用
- 请教:OpenUrl() 总是抛出异常:无法解析服务器名称或地址?
- 程序在XP系统中只能以兼容256色模式下运行问题
- 那位兄弟有《WINDOWS网络编程技术》的原代码,搜了好久也没有找到,看到论坛过去的贴子,雅可医生有,望帮忙
- 是不是所有的.dll都可以用LoadLibrary来加载
- 一个关于class view现实的问题?
- 网卡ID号???
- jrtplib关于组播的问题。
- HELP:当对话框发生大小变化时,其中的控件如何才能随之变化?
- 《Visual C++程序开发范例宝典》书的电子版哪位大虾有啊?
- 播放器问题
<div>
...
</div>
xxxx
</div>如果我的光標在 xxxx 上,取 elementFromPoint 給出的是最外面的div elemnt,但我需要的是 xxxx 這個 TextNode (我不要文字本身,我要的是 node),但我搜遍了,沒有找到能讀取當前 node 的方法。請大家幫幫忙
CComPtr <IHTMLTxtRange> txtRange;
CComPtr <IHTMLSelectionObject> pSelection;
spDoc->get_selection(&pSelection);
if (pSelection)
{
QueryInterface node /*
CComPtr <IDispatch> pDispRange;
pSelection->createRange(&pDispRange);
if (pDispRange)
{
hr = pDispRange->QueryInterface(IID_IHTMLTxtRange, (void**)&txtRange);
if ( SUCCEEDED(hr) && txtRange )
{
txtRange->collapse(VARIANT_TRUE);
if (pElem)
{ if (SUCCEEDED(txtRange->moveToElementText(pElem)))
{
txtRange->select();
txtRange->scrollIntoView();
}
}
txtRange.Release();
}
pDispRange.Release();
*/
}
pSelection.Release();
}
Text 元素不是非 Text 元素判断一下
if (pDispRange) 如果pDispRange查询不到txtRange那就说明它是非txt元素否则是是txt
要判断是否有text也很简单,如果当前的element不是text,接着枚举其child element即可。
query IHTMLDOMNode 衹能用在非 text 節點上,在 text 上用它衹會返回 父類的節點。你說的 enumerate 的方法我也試過,但有很多情況下一個父元素可以有很多的 textnode,而每個 textnode 上的文字可以完全相同,即使通過txtrange 找到了 text,但如果多個 textnode 都含同一段文字,你怎樣判斷哪一個才是當前的?