2011-02-09 4 views
5

मुझे पता है कि यह एक साधारण काम होना चाहिए, लेकिन मुझे अंतिम शब्द शीर्षक शीर्षक चुनने में समस्याएं आ रही हैं और एक अवधि में लपेटने में समस्याएं हैं ताकि मैं शैली में बदलाव जोड़ सकूं।मैं jQuery का उपयोग करके किसी तत्व के आंतरिक पाठ के अंतिम शब्द के चारों ओर एक अवधि को कैसे लपेटूं?

यहाँ बहुत सराहना

+1

आप शायद पहले से ही के माध्यम से इस बारे में सोचा है, लेकिन यह शायद इस सर्वर साइड करने के लिए आसान होगा, क्योंकि कई वेब प्रोग्रामिंग भाषाओं से निपटने के लिए कई उच्च स्तरीय कार्य टेक्स्ट मैनिपुलेशन, जबकि jQuery का मतलब है (जैसे स्टीफन ने कहा) डीओएम नोड्स से निपटने के लिए। (मैन, वह एक लंबी रन-ऑन वाक्य थी।) – eykanal

+0

मैं @eykanal के साथ सहमत हूं, जब तक कि आप किसी प्रकार की jQuery प्लगइन नहीं बना रहे हैं जिसका उपयोग अन्य डेवलपर्स द्वारा किया जाएगा। – Stephen

उत्तर

15

समस्या यह है कि jQuery वस्तुओं रैप डोम नोड्स है जो मैं अब तक

$('.side-c h3').split(/\s+/).pop().wrap('<span />'); 

किसी भी मदद की हो जाएगा है। तत्व में प्रत्येक शब्द एक डोम नोड स्वयं नहीं है, इसलिए आपको टेक्स्ट को अलग करने और फिर से जुड़ने के लिए थोड़ा और काम करने की आवश्यकता होगी। आपको jQuery द्वारा चुने गए एकाधिक नोड्स के लिए भी खाते की आवश्यकता है। इसे आज़माएं:

$('.side-c h3').each(function(index, element) { 
    var heading = $(element), word_array, last_word, first_part; 

    word_array = heading.html().split(/\s+/); // split on spaces 
    last_word = word_array.pop();    // pop the last word 
    first_part = word_array.join(' ');  // rejoin the first words together 

    heading.html([first_part, ' <span>', last_word, '</span>'].join('')); 
}); 
+0

यह थोड़े काम करता है! लेकिन यह पृष्ठ –

+0

पर उन सभी के लिए शीर्षलेखों को फिर से लिखता है ओह, आपके पास एकाधिक '.side-c h3' है? मैं अपना जवाब दोबारा लिखूंगा। – Stephen

+0

एक अंतिम अद्यतन। आपको इस नए नमूने के साथ जाने के लिए अच्छा होना चाहिए। अगर आपको यह समझाया जाए तो मुझे बताएं। – Stephen

0

हम्म, यह विशेष रूप से आसान नहीं है। ऐसा करने का सबसे रूढ़िवादी रास्ता DOMNode.splitText साथ है:

$('.side-c h3').each(function(){ 
    var oldNode = this.firstChild, 
     newNode = oldNode.splitText(oldNode.data.lastIndexOf(' ') + 1), // don't wrap the space 
     span = document.createElement('span'); 

    this.replaceChild(span, newNode); 
    span.appendChild(newNode); 
}); 

See jsfiddle

2

यह यह करता है:

$('.side-c h3').each(function(){ 
    var $this = $(this), text=$this.text().trim(), words = text.split(/\s+/); 
    var lastWord = words.pop(); 
    words.push('<span>' + lastWord + '</span>'); 
    $this.html(words.join(' ')); 
}); 
संबंधित मुद्दे