27 января 2011 г.

как изменить скрипт удаления тегов

Есть скрипт для Blogger. Он берёт текст статьи, выкидывает все HTML теги и добавляет картинку изменённого размера из первой картинки сообщения.
Потом текст обрезается и получается анонс статьи.
Использую в блоге для вывода анонса статьи на главной странице http://ivsnow.blogspot.ru
Нужно переделать его так, чтобы остались теги со ссылками <a href...></a> и переноса строк <br>. А то какие то пустые анонсы статей получаются.
Похоже нужно модифицировать функцию  removeHtmlTag
Как это сделать?

Вот текст скрипта:
<script type='text/javascript'>var thumbnail_mode = &quot;no-float&quot; ; summary_noimg = 430; summary_img = 340; img_thumb_height = 100; img_thumb_width = 120; </script> <script type='text/javascript'> //<![CDATA[ function removeHtmlTag(strx,chop){ if(strx.indexOf("<")!=-1) { var s = strx.split("<"); for(var i=0;i<s.length;i++){ if(s[i].indexOf(">")!=-1){ s[i] = s[i].substring(s[i].indexOf(">")+1,s[i].length); } } strx = s.join(""); } chop = (chop < strx.length-1) ? chop : strx.length-2; while(strx.charAt(chop-1)!=' ' && strx.indexOf(' ',chop)!=-1) chop++; strx = strx.substring(0,chop-1); return strx+'...'; } function createSummaryAndThumb(pID){ var div = document.getElementById(pID); var imgtag = ""; var img = div.getElementsByTagName("img"); var summ = summary_noimg; if(img.length>=1) { imgtag = '<span style="float:left; padding:0px 10px 5px 0px;"><img src="'+img[0].src+'" width="'+img_thumb_width+'px" height="'+img_thumb_height+'px"/></span>'; summ = summary_img; } var summary = imgtag + '<div>' + removeHtmlTag(div.innerHTML,summ) + '</div>'; div.innerHTML = summary; }Syhi-подсветка кода
Благодаря @Alex_Belov решение найдено. Найден сайт с аналогами PHP-шных функций на JScript - http://phpjs.org/functions/strip_tags:535. Используем функцию strip_tags(), которая удаляет все теги кроме указанных в качестве второго параметра.
В нашем случае это выглядит так:

<script type='text/javascript'>var thumbnail_mode = &quot;no-float&quot; ; summary_noimg = 430; summary_img = 340; img_thumb_height = 100; img_thumb_width = 120; </script> <script type='text/javascript'> //<![CDATA[ function createSummaryAndThumb(pID){ var div = document.getElementById(pID); var imgtag = ""; var img = div.getElementsByTagName("img"); var summ = summary_noimg; if(img.length>=1) { imgtag = '<span style="float:left; padding:0px 10px 5px 0px;"><img src="'+img[0].src+'" width="'+img_thumb_width+'px" height="'+img_thumb_height+'px"/></span>'; summ = summary_img; } function strip_tags (input, allowed) {     // http://kevin.vanzonneveld.net     // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)     // +   improved by: Luke Godfrey     // +      input by: Pul     // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)     // +   bugfixed by: Onno Marsman     // +      input by: Alex     // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)     // +      input by: Marc Palau     // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)     // +      input by: Brett Zamir (http://brett-zamir.me)     // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)     // +   bugfixed by: Eric Nagel     // +      input by: Bobby Drake     // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)     // +   bugfixed by: Tomasz Wesolowski     // +      input by: Evertjan Garretsen     // +    revised by: Rafal Kukawski (http://blog.kukawski.pl/)     // *     example 1: strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>');     // *     returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'     // *     example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');     // *     returns 2: '<p>Kevin van Zonneveld</p>'     // *     example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>");     // *     returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>'     // *     example 4: strip_tags('1 < 5 5 > 1');     // *     returns 4: '1 < 5 5 > 1'     // *     example 5: strip_tags('1 <br/> 1');     // *     returns 5: '1  1'     // *     example 6: strip_tags('1 <br/> 1', '<br>');     // *     returns 6: '1  1'     // *     example 7: strip_tags('1 <br/> 1', '<br><br/>');     // *     returns 7: '1 <br/> 1'            allowed = (((allowed || "") + "")               .toLowerCase()               .match(/<[a-z][a-z0-9]*>/g) || [])               .join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)            var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,                commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;            return input.replace(commentsAndPhpTags, '').replace(tags, function($0, $1){               return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';            });         } function removeHtmlTag2(strx,chop){ if(strx.indexOf("<")!=-1) { var strx = strip_tags (strx, '<br><a></a><br />'); } chop = (chop < strx.length-1) ? chop : strx.length-2; while(strx.charAt(chop-1)!=' ' && strx.indexOf(' ',chop)!=-1) chop++; strx = strx.substring(0,chop-1); return strx+'...'; } var summary = imgtag + '<div>' + removeHtmlTag2(div.innerHTML,summ) + '</div>'; div.innerHTML = summary; }Syhi-подсветка кода

2 коммент.:

Alex_Belov комментирует...
Этот комментарий был удален автором.
Alex_Belov комментирует...

Достаточно оставить <br><a>, закрывающие для них тэги не удаляются тоже.

Отправить комментарий