2011-06-25 19 views
9

के साथ किसी पृष्ठ पर संख्याओं का चयन करें, मैं बस सोच रहा हूं कि jQuery या सादे जावास्क्रिप्ट वाले किसी पृष्ठ पर संख्याओं का पता लगाने का कोई तरीका है या नहीं।jQuery या जावास्क्रिप्ट

यहाँ मैं क्या करना चाहते हैं:

कहते हैं "23 जून" पृष्ठ पर है। मैं जो करना चाहता हूं वह संख्या <span> चयनकर्ताओं को संख्या में प्रीपेन्ड और संलग्न करने में सक्षम है।

jQuery के साथ :contains() का उपयोग कर पूरी चीज का चयन करता है, केवल संख्या ही नहीं।

ये तार किसी वर्डप्रेस थीम द्वारा किसी भी रैपिंग तत्वों के बिना उत्पन्न किए जा रहे हैं, और मैं केवल का चयन करना चाहता हूं।

किसी भी मदद की सराहना की जाएगी! इसके बारे में सोचने के लिए भी धन्यवाद।
-जॉर्ज

+1

क्या आपको पता है कि आपकी तिथि किस सटीक तत्व में है? क्या आप शायद कुछ regex-ing कर सकते हैं और एक तारीख खोज सकते हैं? रोचक प्रश्न – Marnix

+1

+1 इनपुट के लिए धन्यवाद, लेकिन यह प्रारूपित तिथियां नहीं है जिन्हें मैं ढूंढ रहा हूं।बस संख्याएं, किसी भी प्रारूप में आवश्यक नहीं – leon

उत्तर

9

आप सभी तत्वों के माध्यम से चल सकते हैं, टेक्स्ट नोड्स को देख सकते हैं, और उन्हें अद्यतन सामग्री के साथ बदल सकते हैं जिसमें संख्या लपेटी गई है।

var regex = /(\d+)/, 
    replacement = '<span>$1</span>'; 

function replaceText(el) { 
    if (el.nodeType === 3) { 
     if (regex.test(el.data)) { 
      var temp_div = document.createElement('div'); 
      temp_div.innerHTML = el.data.replace(regex, replacement); 
      var nodes = temp_div.childNodes; 
      while (nodes[0]) { 
       el.parentNode.insertBefore(nodes[0],el); 
      } 
      el.parentNode.removeChild(el); 
     } 
    } else if (el.nodeType === 1) { 
     for (var i = 0; i < el.childNodes.length; i++) { 
      replaceText(el.childNodes[i]); 
     } 
    } 
} 

replaceText(document.body); 

उदाहरण:http://jsfiddle.net/JVsM4/

यह मौजूदा तत्वों को कोई नुकसान, और उनके संबद्ध jQuery डेटा नहीं करता है।


संपादित करें: आप इसे थोड़ा एक छोटे से jQuery के साथ छोटा हो सकता है:

var regex = /(\d+)/g, 
    replacement = '<span>$1</span>'; 

function replaceText(i,el) { 
    if (el.nodeType === 3) { 
     if (regex.test(el.data)) { 
      $(el).replaceWith(el.data.replace(regex, replacement)); 
     } 
    } else { 
     $(el).contents().each(replaceText); 
    } 
} 

$('body').each(replaceText); 

उदाहरण:http://jsfiddle.net/JVsM4/1/

ध्यान दें कि regex g वैश्विक संशोधक की आवश्यकता है।

शायद इस तरह थोड़ा धीमा, इसलिए अगर डोम काफी बड़ा है, तो मैं गैर-jQuery संस्करण का उपयोग करूंगा।

+3

+1। – thirtydot

0

यह आपकी तिथि के प्रारूप पर पूरी तरह से निर्भर है।

मुझे इस वेबसाइट को कई अलग-अलग नियमित अभिव्यक्तियों के साथ मिला (क्योंकि आप किसी तारीख के लिए टेक्स्ट का सामान्य टुकड़ा खोज रहे हैं)।

यह एक अच्छा विकल्प लगता है अगर यह आपके तिथि (dd MMM वर्ष) के लिए अपने स्वरूप है:, http://regexlib.com/REDetails.aspx?regexp_id=405

मुझे लगता है, क्योंकि यह एक टेम्पलेट है, कि अपनी तिथियाँ सभी पृष्ठों के लिए एक ही हो जाएगा। तो प्रारूप भी वही होगा। यदि आप इसे अच्छी तरह से परिभाषित करते हैं तो आप अपने टेम्पलेट पर टेक्स्ट के प्रत्येक टुकड़े पर नियमित अभिव्यक्ति का उपयोग कर सकते हैं।

+0

इनपुट के लिए धन्यवाद – ggwicz

+0

** धन्यवाद सभी ** @ पैट्रिक डीडब्ल्यू का समाधान बहुत अच्छा काम करता है। धन्यवाद आदमी! – ggwicz

1

बस जोर से सोच रहा है, लेकिन क्या आपको लगता है कि यह काम करेगा?

document.body.innerHTML = document.body.innerHTML.replace(/(\d+)/g, "<span class='number'>$1</span>") 
+0

[0-9] + = \ d +, है ना? – leon

+0

@andreas ऐसा लगता है कि यह संख्याओं को पकड़ लेगा, लेकिन मैं केवल 'span' को पूर्ववत करना और जोड़ना चाहता हूं। $ 1 नंबर को प्रतिस्थापित करेगा? (मैं जावास्क्रिप्ट नोब हूं) – ggwicz

+0

@leon, हां हां। मेरा जवाब संपादित किया। –

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