2012-01-22 17 views
5

से जावास्क्रिप्ट का उपयोग कर उपयोगकर्ता चयन की प्रारंभ और समाप्ति स्थिति की गणना करें मैं एक ज्ञात मूल तत्व से उपयोगकर्ता चयन की आरंभ और समाप्ति स्थिति की गणना करने का एक तरीका ढूंढ रहा हूं। मैं कुछ मामूली संशोधन के साथ this पर आया था, मैं एफएफ के लिए काम करने में सक्षम था, लेकिन मुझे यकीन नहीं है कि आईई में ऐसा कैसे करें और अगर मेरा संशोधन उचित है तो मुझे कुछ विचार मिलना अच्छा लगेगा। मूल उत्तर के लिए टिम डाउन के लिए बड़ा धन्यवाद।अभिभावक तत्व

function getBodyTextOffset(node, offset) { 
    var sel = window.getSelection(); 
    var range = document.createRange(); 
    range.selectNodeContents(document.getElementById('test')); 
    range.setEnd(node, offset); 
    sel.removeAllRanges(); 
    sel.addRange(range); 
    return sel.toString().length; 
} 

function getSelectionOffsets() { 
    var sel, range; 
    var start = 0, end = 0; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.rangeCount) { 
      range = sel.getRangeAt(sel.rangeCount - 1); 
      start = getBodyTextOffset(range.startContainer, range.startOffset); 
      end = getBodyTextOffset(range.endContainer, range.endOffset); 
      sel.removeAllRanges(); 
      sel.addRange(range); 
      alert(start + ", " + end); 
     } 
    } else if (document.selection) { 
     // IE stuff here 
    } 
    return { 
     start: start, 
     end: end 
    }; 
} 

मैं जानता हूँ कि यह एक समय हो गया है, लेकिन यहाँ एक JSFiddle विचार दिखा है। फिर यह एफएफ और क्रोम में काम करता है लेकिन आईई 9 नहीं। आदर्श रूप से मैं तत्व परीक्षण की शुरुआत से ऑफ़सेट प्राप्त करने में सक्षम होना चाहता हूं।

+1

कम [jsfiddle] (http://jsfiddle.net/) डेमो एक अच्छा जवाब प्राप्त करने के आपके अवसरों में काफी सुधार करेगा। – c69

+0

[रंगी] देखें (http://code.google.com/p/rangy/)। आप अपने वर्तमान कोड को बहुत बारीकी से अनुवाद करने में सक्षम हो सकते हैं। – Hemlock

उत्तर

1

जावास्क्रिप्ट रेंज हालांकि सभ्य प्रारंभिक एक अस्पष्ट एक दर्दनाक विषय है यहाँ हालांकि कुछ अच्छे संसाधन हैं ...

यहाँ कुछ क़ौम है कि आप संदर्भ के रूप में उपयोग कर सकते हैं ...

http://dylanschiemann.com/articles/dom2Range/dom2RangeExamples.html

यह समझने के लिए इंगित करें कि कौन से तरीके और गुण उपलब्ध हैं ... http://help.dottoro.com/ljxsqnoi.php

आप निम्न जावास्क्रिप्ट का उपयोग कर क्या कर सकते हैं ...

for (i in window.getSelection()) {alert('i = '+i);} 

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

for (i in window.getSelection().getRangeAt(0)) {alert('i = '+i);} 

इसके अलावा गेको ब्राउज़रों में एक बहुत ही खराब रेंज बग है (उदाहरण के लिए फ़ायरफ़ॉक्स) जहां आप माउस को एक तत्व के बाहर थोड़ा सा स्थानांतरित करते हैं, हालांकि 50% अक्षरों/चरित्र के कम से कम 50% गीको गलत तरीके से उस तत्व को सीमा तत्व सेट करता है, भले ही इसे चुना नहीं गया हो। यह असाधारण रूप से बुरा है कि यह पता लगाने की कोशिश कर रहा है कि यह क्या है और मोज़िला ने वास्तव में इसे ठीक करने से इंकार कर दिया है (क्योंकि उनके पास कई अन्य बग हैं जहां वे गलत हैं), यहां मेरे द्वारा बनाई गई बग पोस्ट का लिंक है ...

https://bugzilla.mozilla.org/show_bug.cgi?id=696571

उम्मीद है कि यह आपको सही दिशा में आगे बढ़ेगा।

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