jQuery

2010-02-26 16 views
6

का उपयोग करके लंबे वाक्य को हाइलाइट करना मैं पृष्ठ पर पैराग्राफ ऑब्जेक्ट्स की सरणी में निहित लंबे वाक्य (कहें, 50 शब्द या अधिक) को हाइलाइट करना चाहता हूं, यानी $("#content p")। मुझे यकीन नहीं है कि इससे कैसे निपटें।jQuery

मैंने मूल रूप से सभी वाक्यों को हाइलाइट करने का प्रयास किया, लेकिन जब वे HTML टैग्स में थे, तो समस्या में भाग गया (उदाहरण के लिए नेट पर कोड हाइलाइट करना केवल अलग-अलग शब्दों के लिए प्रतीत होता है, इसलिए वे बच्चे नोड्स को खाते में नहीं लेते हैं)। मुझे पता है कि विभाजन वाक्यों मुश्किल है; मैं उपयोग करना चाहता हूँ।! या तो एक स्थान के बाद एक पूंजी पत्र या कुछ भी नहीं (यानी अनुच्छेद का अंत) का पालन किया।

किसी भी मदद/सलाह के लिए अग्रिम धन्यवाद।

उत्तर

2

आप जो बोलते हैं उसे यह सही पाने के लिए मुश्किल हो वाला है के रूप में, आप इस तथ्य को देखते हुए, फिर से नहीं उन सब को पकड़ने के लिए जा रहा है, मैं कुछ सरल की तरह साथ रहना चाहते हैं:

var regex = \[^.!?]{50,}[.!?]\; 

बहुत चालाक और हो रही है आप अनुमान लगाएंगे कि आप उचित रूप से चाहते हैं कि आप किनारे के मामलों के लिए कोडिंग अधिक समय बिताएंगे।

+0

मैं यहाँ मान लिया है कि आपने अपने jQuery बुनियादी हाइलाइटिंग करने के लिए मिल गया है? –

+0

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

0

मुझे यकीन नहीं है कि क्लाइंट पक्ष पर ऐसा करने के लिए सबसे अच्छी बात यह है। मैं काम करने के लिए पैराग्राफ को सर्वर पर वापस भेजने पर विचार करता हूं। लेकिन काम एक ही तरह से होना चाहिए।

सबसे पहले पैराग्राफ की सभी सामग्री लें, यह सुनिश्चित करें कि यह डोम में कुछ नोड्स में हो सकता है। (Read This) फिर आपको एक पार्सर बनाना होगा जो HTML विभाजन में रहते हुए उन्हें अनदेखा करते हुए आपके विभाजित वर्णों को ढूंढता है।

उदाहरण के तौर पर। एक href विशेषता में अनदेखा किया जाना चाहिए और विभाजित नहीं होना चाहिए। पार्सिंग करते समय आप एक शब्द गणना भी रख सकते हैं और रिक्त स्थान पर काम करना तोड़ सकते हैं। प्रत्येक वाक्य को एक ऑब्जेक्ट बनाएं जिसमें संपूर्ण वाक्य और शब्द गणना हो। तो आप उन वस्तुओं को एक सरणी में धक्का दे सकते हैं जो अनुच्छेद का प्रतिनिधित्व करता है। एक बार पूरा करने के बाद आप सरणी के माध्यम से फिर से शुरू कर सकते हैं और सीएसएस के साथ हाइलाइट करने के लिए किसी भी वाक्य को लपेट सकते हैं यदि शब्द गणना आपकी दहलीज तक पहुंच जाती है।

बड़ी समस्या टैग है जो निम्न जैसे दो वाक्यों के भाग हो सकती है।

I'm typing <b> in bold. NOW!</b> 

मैं क्या कर रहा है कि के साथ सौदा नहीं है, लेकिन आप पार्सर अधिक जटिल बाद में उस का समर्थन करने के कर सकता है के बारे में बात की है।

तो मेरे रैंपिंग पार्स का एक त्वरित अवलोकन एक राज्य मशीन के साथ सभी वर्णों के माध्यम से जो गिनती शब्दों और सही स्थान पर विभाजित करने से संबंधित है। विभाजन पर आपके द्वारा एकत्र किए गए डेटा को सरणी में जोड़ें। जब नए लिपटे वाक्यों को आउटपुट करने वाले सरणी के माध्यम से पुनरावृत्त किया जाता है।

0

यह शायद एक नहीं बल्कि धीमी गति से समाधान है, और बदसूरत भी है, लेकिन यह कोड के लिए बहुत सरल होना चाहिए:

एक स्ट्रिंग में सभी पाठ पढ़ें, और फिर यह द्वारा पार्स करें, वर्ण गिनती और हर खोजने।! ? -वर्ण। पार्सिंग लूप में, आप < और> के लिए भी देखें, जहां < का अर्थ है "सभी को अनदेखा करें!!? किसी अन्य को ढूंढने तक>"। फिर हर बार जब आप एक।!? - चरित्र पाते हैं, तो आप पिछले एक के बाद से लंबाई की जांच करते हैं, और यदि यह काफी लंबा है तो आप इंडेक्स को प्रारंभ करने के लिए इंडेक्स को सहेजते हैं- और अंतराल को किसी सरणी या किसी चीज़ में सहेजते हैं।

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

समाप्त होने पर, नए स्ट्रिंग वापस रख जहां आप इसे से मिल गया ...

0

ऐसा करने के लिए आप प्रत्येक अनुच्छेद (node.html()) के एचटीएमएल और फिर जरूरत है एक ही नंबर के साथ HTML टैग के सभी की जगह रिक्त स्थान यह काफी सीधे होना चाहिए और जैसा कि आप केवल एंग्लेड ब्रैकेट और पहला समापन ब्रैकेट खोलने के लिए देख सकते हैं। आप एल्गोरिथ्म के बाकी भ्रमित से किसी भी पूर्ण विराम और टैग के अंदर शब्द को रोकने के लिए सबसे पहले यह करने के लिए की जरूरत है, लेकिन यह भी एक टैग अपने आप में एक शब्द के रूप में गिना जा रहा रोकने के लिए।

स्प्लिट पाठ को एक पूर्ण कुछ भी नहीं या खाली स्थान के लिए किसी भी मात्रा अपने वाक्य को पाने के लिए के बाद बंद पर आधारित है। आप इस विभाजन को करने के लिए मैन्युअल रूप से एक से मेल खाते रेगुलर एक्सप्रेशन के उपयोग ताकि आप मूल स्ट्रिंग में सजा के आरंभ और अंत पदों का ट्रैक रख सकते की जरूरत है।

अगला खाली स्थान के पर प्रत्येक वाक्य विभाजित है और सरणी जो सिर्फ खाली स्थान के से मिलकर से किसी भी 'शब्द' को हटा दें। यह आपको वाक्य की लंबाई देता है। यदि यह आपकी सीमा से अधिक है तो अपने मूल HTML स्ट्रिंग में वाक्य की आरंभ और अंत स्थिति में उपयुक्त HTML डालें। आपको ट्रैक करना होगा कि आपने कितना अतिरिक्त HTML जोड़ा है ताकि आप बाद के लंबे वाक्यों की सही शुरुआत और अंत स्थिति पा सकें।