2009-08-26 13 views
32

आप माउस के साथ एक वेब पेज का एक हिस्सा चुन सकते हैं।मैं डीओएम तत्व कैसे प्राप्त कर सकता हूं जिसमें वर्तमान चयन शामिल है?

मुझे पता है कि मुझे currently selected text मिल सकता है लेकिन मैं डीओएम तत्व कैसे प्राप्त कर सकता हूं जिसमें वर्तमान चयन की शुरुआत या अंत शामिल है?

उत्तर

27

आईई में, document.selection.createRange()। ParentElement() का उपयोग करें और वास्तविक ब्राउज़र में window.getSelection()। GetRangeAt (0) .startContainer.parentNode का उपयोग करें। कुछ इस तरह:

function getSelectedNode() 
{ 
    if (document.selection) 
     return document.selection.createRange().parentElement(); 
    else 
    { 
     var selection = window.getSelection(); 
     if (selection.rangeCount > 0) 
      return selection.getRangeAt(0).startContainer.parentNode; 
    } 
} 
+6

यह ब्राउज़र के बीच असंगत परिणाम देगा और मूल प्रश्न का उत्तर नहीं देगा। आईई में आपको वह तत्व मिलता है जिसमें संपूर्ण चयन होता है, जबकि अन्य ब्राउज़रों में आपको उस नोड के पैरेंट मिलेंगे जिसमें चयन की शुरुआत होती है (जो एक टेक्स्ट नोड या तत्व हो सकता है)। –

54

निम्नलिखित कंटेनर तत्व वर्तमान चयन के आरंभ या अंत सीमा के वापस आ जाएगी, चाहे आप आरंभ या अंत सीमा चाहते हैं निर्दिष्ट करने के लिए बूलियन isStart का उपयोग कर। यह ज्यादातर मुख्यधारा के ब्राउज़र में काम करेगा। अधिक मजबूती के लिए फीचर परीक्षण जोड़ें।

function getSelectionBoundaryElement(isStart) { 
    var range, sel, container; 
    if (document.selection) { 
     range = document.selection.createRange(); 
     range.collapse(isStart); 
     return range.parentElement(); 
    } else { 
     sel = window.getSelection(); 
     if (sel.getRangeAt) { 
      if (sel.rangeCount > 0) { 
       range = sel.getRangeAt(0); 
      } 
     } else { 
      // Old WebKit 
      range = document.createRange(); 
      range.setStart(sel.anchorNode, sel.anchorOffset); 
      range.setEnd(sel.focusNode, sel.focusOffset); 

      // Handle the case when the selection was selected backwards (from the end to the start in the document) 
      if (range.collapsed !== sel.isCollapsed) { 
       range.setStart(sel.focusNode, sel.focusOffset); 
       range.setEnd(sel.anchorNode, sel.anchorOffset); 
      } 
     } 

     if (range) { 
      container = range[isStart ? "startContainer" : "endContainer"]; 

      // Check if the container is a text node and return its parent if so 
      return container.nodeType === 3 ? container.parentNode : container; 
     } 
    } 
} 
+0

यह कमाल है :) बहुत बहुत धन्यवाद ... –

+2

डेमो: http://jsfiddle.net/pmrotule/dmjsnghw/ – pmrotule

+0

यदि मैं पूरे चयन के माता-पिता को प्राप्त करना चाहता हूं तो क्या होगा? क्या यह संभव है? – Flezcano

संबंधित मुद्दे

 संबंधित मुद्दे