2010-02-10 9 views
6

में पाठ का चयन करें और इसमें स्पैन जोड़ें मेरे पास एक ऐसा फ़ंक्शन है जो चयनित टेक्स्ट प्राप्त करता है, पाठ माउस द्वारा चुना जाता है, और इसे एक चर में जोड़ता है। मैं उस पैराग्राफ में चयनित पाठ में उस चर के चारों ओर टैग जोड़ना चाहता हूं।jQuery एक अनुच्छेद

$("p").live("mouseup",function() { 
    selection = getSelectedText(); 
    if(selection.length >= 3) { 
     var $spn = $("<span></span>").html(selection).addClass("selected"); 
     $("p").wrap($spn); 
    } 
}); 

//Grab selected text 
function getSelectedText(){ 
    if(window.getSelection){ 
     return window.getSelection().toString(); 
    } 
    else if(document.getSelection){ 
     return document.getSelection(); 
    } 
    else if(document.selection){ 
     return document.selection.createRange().text; 
    } 
} 

मैं पाठ चयन चर प्राप्त कर सकते हैं, लेकिन इसके बजाय पैरा <p> से चयनित पाठ के आसपास <span></span> रखने की, मेरे समारोह इस बाहर घूमती है।

मैं इसे पैराग्राफ में कैसे बदल सकता हूं? धन्यवाद।

+3

आमतौर पर जो भी आप पूछते हैं वह करना बहुत कठिन होता है। क्या आप वाकई अनुच्छेद के तहत कोई नेस्टेड टैग नहीं हैं? यदि वहां हैं, तो मौजूदा वास्तुकला को तोड़ने के बिना करना मुश्किल हो सकता है। – glmxndr

+0

नए बनाए गए स्पैन को छोड़कर अनुच्छेद के तहत कोई अन्य टैग नहीं होना चाहिए। – Mircea

उत्तर

5

यह जहां यह गलत हो जाता है:

var $spn = $("<span></span>").html(selection).addClass("selected"); 
$("p").wrap($spn); 

इसका मतलब है आप पैराग्राफ के आसपास span लपेटकर रहे हैं।

मुझे लगता है कि आप इस तरह से कुछ करने के लिए मतलब है:

var spn = '<span class="selected">' + selection + '</span>'; 
$(this).html($(this).html().replace(selection, spn)); 
+1

$ spn jQuery है, स्ट्रिंग नहीं। – tvanfosson

+0

मेरा टेक्स्ट [ऑब्जेक्ट ऑब्जेक्ट] के साथ बदल दिया गया है, के बिना। क्या मेरे चर के साथ कुछ गड़बड़ है? – Mircea

+0

बेहतर काम करता है, अब मैं मिलता है: < span class = "चयनित" > चयनित </span > अवधि सही पार्स नहीं करता है, मैं प्राप्त > बल्कि तो <> – Mircea

0

untested है, लेकिन काम करना चाहिए:

$("p").live("mouseup",function() { 
selection = getSelectedText(); 
if(selection.length >= 3) { 
var $spn = $("<span></span>").html(selection).addClass("selected"); 
$(this).html($(this).html().replace(selection, $spn); 
} 
}); 
+0

$ spn jQuery है, स्ट्रिंग नहीं। – tvanfosson

+0

मैं इसका उपयोग करता हूं: $ (दस्तावेज़) .ready (function() { $ ("पी")।लाइव ("माउसअप", फ़ंक्शन() { चयन = getSelectedText(); यदि (चयन। लम्बाई> = 3) { var $ spn = $ ("") .html (चयन) .addClass ("चयनित "); $ (यह)। एचटीएमएल ($ (यह)। एचटीएमएल()। प्रतिस्थापित करें (चयन, $ spn)); } }); ऐसा लगता है कि मैंने अपनी विविधता खो दी है, अनुच्छेद कार्यों में चयन है लेकिन इसे [ऑब्जेक्ट ऑब्जेक्ट] टेक्स्ट के साथ प्रतिस्थापित किया गया है - कोई अवधि – Mircea

+0

ओह, मेरा बुरा ... मैंने बस प्रतिस्थापन भाग में देखा, मुझे लगता है कि बाकी पहले ही काम कर चुके हैं । – Daan

0

मुझे लगता है कि आप, पैराग्राफ में पाठ बदलने के लिए नहीं का उपयोग की आवश्यकता होगी लपेट दें।

$("p").live("mouseup",function() { 
    selection = getSelectedText(); 
    if(selection.length >= 3) { 
     var spn = "<span class='selected'>" + selection + "</span>"); 
     var html = $(this).html().replace(selection,spn); 
     $(this).html(html); 
    } 
}); 

ध्यान दें कि यह केवल मज़बूती से काम करने के लिए करता है, तो पैरा केवल पाठ और कोई मार्कअप शामिल रहा है।

+0

यह काम नहीं करेगा अगर, उदाहरण के लिए, मैंने कई टैगों में टेक्स्ट का चयन किया है। यदि पी इस तरह है: '

कुछ टेक्स्ट

'और मैं' ओमे टेक्स 'का चयन करता हूं, तो आपकी विधि कुछ भी नहीं बदलेगी। – glmxndr

+0

@subtenante - मुझे पता है - मैंने जवाब के अंत में यह ध्यान दिया, हालांकि यह काम कर सकता है अगर चयन एल्गोरिदम को डीओएम के मिलान खंड को खोजने के लिए संशोधित किया गया था और संपूर्ण HTML (टेक्स्ट नहीं) का चयन किया गया था। एक साधारण पैराग्राफ के लिए केवल पाठ वाला यह काम करेगा (एक बार)। – tvanfosson

+0

हां, मैंने अभी स्पष्ट किया है कि यह क्यों काम नहीं करेगा। :) – glmxndr

1

उपयोग .wrapInner() बजाय .wrap()

1

कोशिश चयन ट्रिम और html-आंतरिक पंक्ति विराम को बदलने के लिए। इससे बहुत मदद मिलती है:

$('#tweet_contents').live("mouseup",function() { 
    selection = getSelectedText().replace(/^\s+|\s+$/g,""); 

    if(selection.length >= 4) { 
     var spn = '<span id=\"selected\" class=\"polarite\" selcount=\"'+selcounter+'\" >'+selection+'<span id=\"superscript\">'+selcounter+'<\/span>'+'<\/span>'; 

    $(this).html($(this).html().replace(/(\r\n|\n|\r)/gm," ").replace(selection, spn)); 
    } 
}); 
संबंधित मुद्दे