2011-02-06 10 views
5

मैं डिज़ाइन मोड के साथ एक आईफ़्रेम के अंदर एक साधारण WYSIWYG संपादक बना रहा हूं, वर्तमान में मैं चयनित टेक्स्ट बोल्ड, इटैलिक और अंडरलाइन और लिंक करने के लिए कर सकता हूं, और वे ठीक काम करते हैं।जावास्क्रिप्ट: कैरेट का पता लगाएं माता-पिता नोड

लेकिन मुझे पता है कि जब caretb, i, u, a, टैग, तो मैं उपयोगकर्ता को सूचित कर सकते हैं कि वर्तमान चयन बोल्ड है या जो कुछ भी अंदर है चाहते हैं ।

उदाहरण:

Hello <b>Stackover|flow</b> is cool! = आप अंदर b टैग

<i>Be|st place</i>! हैं = आप अंदर i टैग

Hello <a href="http://stackoverflow.com/">Go|od stuff!</a> हैं = आप अंदर a टैग

हैं

नहीं पुस्तकालयों को खुश मैं इस चीज :)

+0

[इस सवाल] (http के संभावित डुप्लिकेट: // stackoverflow.com/questions/263743/how-to-get-cursor-position-in-textarea) –

+0

@ टाइयलर होलियन, मैं एक नंबर के रूप में देखभाल की स्थिति के बारे में बात नहीं कर रहा हूं, मैं भी इसके माता-पिता नोड नाम प्राप्त करना चाहता हूं , और स्वीकार्य उत्तर समाधान केवल textareas पर काम करता है। – Adam

+0

सच है, क्षमा करें। कैरेट कहां है, अगर कोई textarea नहीं है? –

उत्तर

8

MSIE LTE 8 जानने के लिए करना चाहते हैं: TextRange.parentElement()

अन्य: DOMRange.commonAncestorContainer

<script type="text/javascript"> 
<!-- 
function fx() 
{ 

    var target=null; 
    if(window.getSelection) 
    { 
    target=window.getSelection().getRangeAt(0).commonAncestorContainer; 
    return((target.nodeType===1)?target:target.parentNode); 
    } 
    else if(document.selection) 
    { 
    var target=document.selection.createRange().parentElement(); 
    } 
    return target; 
} 
//--> 
</script> 
<input type="button" onclick="alert(fx().tagName)" value="click"> 
<div id="editor" contenteditable="true"> 
Hello <b>Stackoverflow</b> is cool! <i>Best place</i> 
Hello <a href="http://stackoverflow.com/">Good stuff!</a> 
</div> 
+0

पर डिज़ाइन मोड के साथ हाय @ डॉ। मोलले, मुझे 'आम पूर्वजों के बारे में पता है', लेकिन 'parentElement' के लिए +1) :) , 'CommonAncestorContainer.nodeName' के साथ मेरी समस्या यह है कि मुझे हर प्रकार के पाठ के लिए '# text' देता है, तो मुझे इससे वास्तविक माता-पिता नोड नाम कैसे प्राप्त करना चाहिए? :) – Adam

+0

'commonAncestorContainer.pntNode'' चुनें, यदि 'commonAncestornontainer.nodeType' 1 –

+0

नहीं है, मुझे क्रोम (9.0.597.84), सफारी (5.0.3) के साथ '# टेक्स्ट' मिलता है, और फ़ायरफ़ॉक्स और ओपेरा के साथ कुछ भी नहीं, IE untested : | – Adam

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