有沒有 nodeFromPoint?

KFC123 2009-03-20 01:58:21
對 HTMLElement, 有 elementFromPoint 可以找出當前點下的 element,但這個elementFromPoint衹能返回非 Text 元素,我想的是返回當前點的 node,如果當前的是 Text 則返回 Text node, 但怎麼沒有 nodeFromPoint 之類的用法?怎樣可以找出當前光標下的 node?
...全文
84 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
会思考的草 2009-03-25
  • 打赏
  • 举报
回复
通过elementFromPoint取得IHTMLElement之后,query IHTMLDOMNode。
要判断是否有text也很简单,如果当前的element不是text,接着枚举其child element即可。
KFC123 2009-03-25
  • 打赏
  • 举报
回复
好的,謝謝。但即使可以判斷它是否text,你怎樣可以取得它對應的 node?
KFC123 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 codewarrior 的回复:]
通过elementFromPoint取得IHTMLElement之后,query IHTMLDOMNode。
要判断是否有text也很简单,如果当前的element不是text,接着枚举其child element即可。
[/Quote]

query IHTMLDOMNode 衹能用在非 text 節點上,在 text 上用它衹會返回 父類的節點。

你說的 enumerate 的方法我也試過,但有很多情況下一個父元素可以有很多的 textnode,而每個 textnode 上的文字可以完全相同,即使通過txtrange 找到了 text,但如果多個 textnode 都含同一段文字,你怎樣判斷哪一個才是當前的?
e7844 2009-03-24
  • 打赏
  • 举报
回复
pSelection->createRange(&pDispRange);
if (pDispRange)

如果pDispRange查询不到txtRange那就说明它是非txt元素

否则是是txt
KFC123 2009-03-24
  • 打赏
  • 举报
回复
我是說沒有一個元素對應 Text,如果你用 elementFromPoint 來讀取當前元素,即使它是 text ,也衹會返回 parent,而不會返回一個代表這個 text 的元素。所以你說 "非 Text 元素不是Text 元素 Text 元素不是非 Text 元素"要成立,那起碼要能找到一個判斷它是不是text元素的方法吧。
e7844 2009-03-23
  • 打赏
  • 举报
回复
既然没有Text 元素,那你为什么要找node
KFC123 2009-03-23
  • 打赏
  • 举报
回复
好,謝謝。我不明白你的提示,我查遍了MSDN,找不到接口可以判斷text元素的,text 本身就不是元素!不想再玩競猜游戲,我用我自己的笨辦法算了,雖然麻煩一點,但起碼可行。anyway, 謝謝。
e7844 2009-03-22
  • 打赏
  • 举报
回复
非 Text 元素不是Text 元素
Text 元素不是非 Text 元素

判断一下
e7844 2009-03-22
  • 打赏
  • 举报
回复
复合去用
KFC123 2009-03-22
  • 打赏
  • 举报
回复
謝謝,但這段代碼無法取得 node 啊。請問你是用甚麼來 QueryInterface node? 用 IHTMLSelectionObject 嗎?但我試過,IHTMLSelectionObject Query 不了 node

[Quote=引用 2 楼 e7844 的回复:]
我在網上找到這一段代碼,用來改變當前光標位置

HRESULT hr;
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**)…
[/Quote]
e7844 2009-03-21
  • 打赏
  • 举报
回复
我在網上找到這一段代碼,用來改變當前光標位置 

HRESULT hr; 
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(); 
KFC123 2009-03-21
  • 打赏
  • 举报
回复
沒有人知道嗎?

<div>
<div>
...
</div>
xxxx
</div>

如果我的光標在 xxxx 上,取 elementFromPoint 給出的是最外面的div elemnt,但我需要的是 xxxx 這個 TextNode (我不要文字本身,我要的是 node),但我搜遍了,沒有找到能讀取當前 node 的方法。請大家幫幫忙

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧