How can I use split, but skip html / javascript / php and other internal tags?

My code inserts the HTML content after the X number of words on the blog. The code works, but there is a problem: it shares everything that it finds in its path, even javascript, html, whatever.

if (index == 2) counts the first two words of the code, and then inserts HTML (in this case, the image) after these words, but does not make any difference in html or clear text. I found this thread here, saying I should use something like this:

 result = subject.match(/<\s*(\w+\b)(?:(?!<\s*\/\s*\1\b)[\s\S])*<\s*\/\s*\1\s*>|\S+/g); 

But I do not know how to implement it.

Basically, I need a code to count each word, but skip any tags, like <\ " " ? --> <!-- /> <\ " " ? --> <!-- />

Fiddle: https://jsfiddle.net/kvenmL07/

HTML:

  <div style="width:450px; margin-left:auto; margin-right:auto" class="newsitem_text"> <div style="width:350px; margin-left:auto; margin-right:auto"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec pellentesque urna eu pulvinar maximus. Sed elit nunc, vestibulum ut eros vitae, pellentesque rhoncus ipsum. In et metus non diam porttitor maximus iaculis nec lectus. Quisque sodales scelerisque auctor. Nam rutrum venenatis eros, eu condimentum erat placerat ut. Pellentesque sed tempus sem, eu viverra ipsum. Vestibulum nec turpis convallis, dapibus massa vitae, posuere mauris. Suspendisse mattis tincidunt lorem. Aliquam erat volutpat. Nullam at tincidunt erat, maximus laoreet ipsum. Quisque nunc neque, semper tincidunt placerat eget, blandit a ante. Suspendisse pulvinar, velit eu ultrices pulvinar, lacus sapien tincidunt ipsum, eget sollicitudin mauris eros molestie ex. Etiam quis orci dui. Phasellus vestibulum mollis molestie. Nam condimentum ornare nisl, sed finibus risus tempus vel. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Vestibulum eget ullamcorper lorem. Aliquam mollis elit in sem dapibus dapibus. Proin vel massa a arcu dictum tincidunt in ut ante. Sed feugiat tempus dictum. Praesent in leo ullamcorper, sodales turpis et, vehicula tellus. Duis pellentesque dui ac turpis tristique imperdiet. Sed sed orci lectus. Suspendisse non egestas sem, sed tincidunt sem. Etiam laoreet dui sem. Mauris hendrerit massa tempus, euismod arcu sit amet, eleifend quam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus id fringilla mauris. Cras dapibus non lacus at finibus. Nullam vitae sagittis neque. Mauris libero velit, interdum non vehicula non, lacinia non augue. Maecenas elementum lacinia interdum. Morbi eget mollis nisl. Integer accumsan condimentum tellus, lacinia pellentesque urna volutpat a. Nullam semper sem et erat commodo sollicitudin. Proin rhoncus felis eu aliquam venenatis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla pretium velit eu molestie condimentum. Vestibulum vitae velit mi. Integer nec leo quam. Nam pulvinar ligula congue consectetur tristique. Donec placerat faucibus diam sit amet fermentum. Ut id pellentesque risus. Nunc lacus orci, rhoncus ut risus sed, mattis posuere tellus. Nulla pellentesque eros sed neque consectetur dictum.</div></div> 

Jquery:

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script type="text/javascript"> jQuery(function($) { var wordList = $(".newsitem_text").html().split(' '); var newHtml = ' '; $.each(wordList, function(index, word){ newHtml += ' ' + word; if (index == 2) { newHtml += '<img src="https://www.google.com.br/logos/doodles/2015/adolphe-saxs-201st-birthday-6443879796572160.2-res.png" />' } }) ; $(".newsitem_text").html(newHtml); }); </script> 
+1
source share
2 answers

If you use .text () instead of .html (), it will not show any tags .. for example:

  <div id="test" class="test2"> <span>this is a test</span> </div> 

then

 var mytext = $("#test").text(); 

mytext will be equal to "this is a test";

+2
source
 word = word.replace(/<\/?[\w#"'-=:; {},.\r\n]+\/?>/g, '\n'); word = word.replace(/&nbsp;/gi, ''); 

You probably only need the first line. add this after $ each. line and up to newHtml + = line.

----------------- edit

Perhaps I first understood it. Try removing tags before splitting ()

 jQuery(function($) { //var wordList = $(".newsitem_text").html().split(' '); var wordList = $(".newsitem_text").html(); wordList = wordList.replace(/<\/?[\w#"'-=:; {},.\r\n]+\/?>/g, '\n'); wordList = wordList.split(' ') var newHtml = ' '; $.each(wordList, function(index, word){ newHtml += ' ' + word; if (index == 2) { newHtml += '<img src="https://www.google.com.br/logos/doodles/2015/adolphe-saxs-201st-birthday-6443879796572160.2-res.png" />' } }) ; $(".newsitem_text").html(newHtml); }); 
0
source

Source: https://habr.com/ru/post/1235445/


All Articles