2017-08-29 6 views
6

का उपयोग कर मल्टीलाइन एचटीएमएल टेक्स्ट काटकर मुझे एक अद्भुत एचटीएमएल कटाव पुस्तकालय, truncate.js मिला, जो मेरी जरूरतों का 99% है। लेकिन मेरे पास एक परेशानी का मुद्दा है जिसका सामना कर रहा हूं। मेरे पास एक आवश्यकता है जिसके लिए पदों की एक श्रृंखला के लिए लाइनों की एक विशिष्ट संख्या के अंत में 'अधिक दिखाएं' की आवश्यकता होती है ... जो यह पुस्तकालय पाठ के ब्लॉक के लिए प्राप्त करने का प्रबंधन करता है .. लेकिन जब यह मल्टीलाइन टेक्स्ट शो की बात आती है अधिक ठीक से तैनात नहीं है।truncate.js

मैंने इस मुद्दे को प्रदर्शित करने के लिए plunker बनाया है। मैं चाहता हूं कि मल्टीलाइन टेक्स्ट के लिए उसी स्थिति में और अधिक दिखने में सक्षम होना चाहिए, वैसे ही यह उसी पृष्ठ पर बैठे पाठ के ब्लॉक के लिए दिखाई देता है।

मेरे पहली कोशिश truncateNestedNodeEnd में पिछले() जोड़ने के लिए समारोह

if ($clipNode.length) { 
     if ($.inArray(element.tagName.toLowerCase(), BLOCK_TAGS) >= 0) { 
      // Certain elements like <li> should not be appended to. 
      $element.after($clipNode); 
     } 
     else 
      { 
      //edited this line to add prev() 
      //$element.append($clipNode) 
      $element.prev().append($clipNode); 

      } 
     }` 

enter image description here

कौन सा मुझे मैं बहु पाठ के लिए क्या चाहते हैं देता था, लेकिन यह तो एक के लिए मूल कार्यक्षमता टूट जाता है प्लंकर में दिखाए गए पाठ का ब्लॉक। मैं इस कार्य को दो मामलों के लिए कैसे काम कर सकता हूं। मैं अभी भी पीले भाग पर दिखाई देने के लिए और अधिक दिखाना चाहता हूं, जब ये दो पोस्ट एक ही पृष्ठ पर बैठे हैं।

+0

में अपडेट किए गए कोड को देखें क्या आप सीएसएस के साथ प्राप्त कर सकते हैं? आप अभी भी बिना किसी पुस्तकालय के इसे कर सकते हैं –

+0

@ मार्को सलर्नो मुझे नहीं लगता कि जेएस का उपयोग इस संबंध में बेकार है। सीएसएस केवल मुझे जो चाहिए वह हासिल नहीं करेगा। । हमने शुरुआत में सीएसएस का उपयोग किया था, लेकिन यह निम्नलिखित आवश्यकता को पूरा नहीं करता था "अनुच्छेद पाठ को पैराग्राफ या मल्टीलाइन टेक्स्ट में गतिशील पाठ की अंतिम पंक्ति के तुरंत बाद प्रदर्शित होना चाहिए"। सीएसएस के साथ हम पूरी तरह से "अधिक दिखाएं" को स्थिति में रखने में कामयाब रहे ... जो बहुत अच्छा काम करता है लेकिन यह वही नहीं है जो हम चाहते थे ... "अधिक दिखाएं" इसकी लंबाई के आधार पर टेक्स्ट के बगल में जोड़ा जाना चाहिए। –

उत्तर

1

समस्या यह है कि truncate.js अलग-अलग कंटेनर में $ क्लिप नोड को दोबारा रखता है और अगर ट्राकेशन फ्लैग सत्य नहीं है तो उन्हें हटा देता है। आपके दृष्टिकोण के साथ समस्या यह थी कि आप उस तत्व के पिछले नोड में शामिल थे जो सूचीबद्ध वस्तुओं के मामले में सच था लेकिन कोई पिछला आइटम नहीं था (टेक्स्ट ब्लॉक के मामले में)। यही कारण है कि आपके दृष्टिकोण में यह टेक्स्ट ब्लॉक में कुछ भी नहीं डाला गया था।मैंने कोड को निम्नानुसार बदल दिया है और फ़ंक्शन के अंत में एक और ऐपेंड स्टेटमेंट जोड़ा है ताकि एक बार जब यह $ क्लिप नोड को जोड़ना समाप्त हो जाए, तो यह उस क्लिप क्लिप को पिछले तत्व पर ले जाता है यदि कोई है तो।

if ($clipNode.length) { 
 
    if ($.inArray(element.tagName.toLowerCase(), BLOCK_TAGS) >= 0) { 
 
    // Certain elements like <li> should not be appended to. 
 
    $element.after($clipNode); 
 
    } else { 
 
    //edited this line to add prev() 
 
    //$element.append($clipNode) 
 
    $element.append($clipNode); 
 

 
    } 
 
} 
 

 
if ($rootNode.height() > options.maxHeight) { 
 
    if (child.nodeType === 3) { // text node 
 
    truncated = truncateTextContent($child, $rootNode, 
 
     $clipNode, options); 
 
    } else { 
 

 
    truncated = truncateNestedNode($child, $rootNode, $clipNode, 
 
     options); 
 
    } 
 
} 
 

 
if (!truncated && $clipNode.length) { 
 
    $clipNode.remove(); 
 
} else { 
 
    $element.prev().append($clipNode); 
 
}

और समस्या

enter image description here

समाधान कर लिया है लग रहा था

कृपया यह भी तुम क्यों करने के लिए एक बेकार js प्रयोग करते हैं Plunker

+0

ग्रेट सामान। यह एक सम्मोहन की तरह काम करता है –

1

मुझे यकीन नहीं है कि मैं आपका उद्देश्य समझता हूं, लेकिन मुझे लगता है कि आप "@Abide Masaraure" टेक्स्ट के साथ बार-बार स्पैन टैग के लिए अंतर को और अधिक संगत होने की कोशिश कर रहे हैं।

यदि ऐसा है, तो मैं क्रोम की इंस्पेक्ट सुविधा या किसी अन्य ब्राउज़र से समान फ़ंक्शन का उपयोग करके जेनरेट किए गए HTML की जांच करने का सुझाव देता हूं।

अजीब अंतरण गैर-ब्रेकिंग स्पेस वर्णों (nbsp;) के कारण होता है क्योंकि अंतिम अवधि टैग से पहले डाला जा रहा है।

यहां कुछ छवियां हैं जिन्हें मैंने आपके प्लंकर उदाहरण से खींचने के लिए खींचा है। enter image description here

किसी भी तरह से स्पैन टैग उनमें से कुछ भी नहीं बल्कि गैर-ब्रेकिंग स्पेस वर्णों के साथ उत्पन्न किए जा रहे हैं।

enter image description here

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

1

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