對 HTMLElement, 有 elementFromPoint 可以找出當前點下的 element,但這個elementFromPoint衹能返回非 Text 元素,我想的是返回當前點的 node,如果當前的是 Text 則返回 Text node, 但怎麼沒有 nodeFromPoint 之類的用法?怎樣可以找出當前光標下的 node?

解决方案 »

  1.   

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

  2.   

    我在網上找到這一段代碼,用來改變當前光標位置 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(); 
      

  3.   

    謝謝,但這段代碼無法取得 node 啊。請問你是用甚麼來 QueryInterface node? 用 IHTMLSelectionObject 嗎?但我試過,IHTMLSelectionObject Query 不了 node
      

  4.   

    非 Text 元素不是Text 元素
    Text 元素不是非 Text 元素判断一下
      

  5.   

    好,謝謝。我不明白你的提示,我查遍了MSDN,找不到接口可以判斷text元素的,text 本身就不是元素!不想再玩競猜游戲,我用我自己的笨辦法算了,雖然麻煩一點,但起碼可行。anyway, 謝謝。
      

  6.   

    既然没有Text 元素,那你为什么要找node
      

  7.   

    我是說沒有一個元素對應 Text,如果你用 elementFromPoint 來讀取當前元素,即使它是 text ,也衹會返回 parent,而不會返回一個代表這個 text 的元素。所以你說 "非 Text 元素不是Text 元素 Text 元素不是非 Text 元素"要成立,那起碼要能找到一個判斷它是不是text元素的方法吧。
      

  8.   

    pSelection->createRange(&pDispRange);  
    if (pDispRange)  如果pDispRange查询不到txtRange那就说明它是非txt元素否则是是txt
      

  9.   

    好的,謝謝。但即使可以判斷它是否text,你怎樣可以取得它對應的 node? 
      

  10.   

    通过elementFromPoint取得IHTMLElement之后,query IHTMLDOMNode。
    要判断是否有text也很简单,如果当前的element不是text,接着枚举其child element即可。
      

  11.   


    query IHTMLDOMNode 衹能用在非 text 節點上,在 text 上用它衹會返回 父類的節點。你說的 enumerate 的方法我也試過,但有很多情況下一個父元素可以有很多的 textnode,而每個 textnode 上的文字可以完全相同,即使通過txtrange 找到了 text,但如果多個 textnode 都含同一段文字,你怎樣判斷哪一個才是當前的?