用于电子邮件模板的HTML到文本转换器(javascript)

时间:2014-05-08 08:06:49

标签: javascript html text process

我想将javascript HTML转换器转换为Text。一切都完成我工作得很好,但我无法处理链接。我需要在文本版本链接中生成的reg表达式为

Html版本:

<a href="http://link.com">Link text</a>

将链接转换为文字版本:

Link text(http://link.com)

我的代码

$('body').on('click','[data-action="convertTemplateToText"]', function() {
    var html = $("#clientHTML").val();

    if (html) {
        html = html.replace(/<!doctype.*>/i,"");
        html = html.replace(/<head>[\w\W]*?<\/head>/i,"");
        html = html.replace(/<style.*>[\w\W]*?<\/style>/gi,"");
        html = html.replace(/<script.*>[\w\W]*?<\/script>/gi,"");
        html = html.replace(/\n|\r/g," ");
        html = html.replace(/\<\/p\>/gi,"\n");
        html = html.replace(/\<\/li\>/gi," ");
        html = html.replace(/\<br\s*?\/?\>/gi,"\n");
        html = strip_tags(html,'<a>');
        html = html_entity_decode(html,'HTML_ENTITIES');
        html = html.replace(/([ \t])+/g," ");
        html = html.replace(/\n /g,"\n");

        if (html.charAt(0) == ' ') {
            html = html.substr(1);
        }
    } else {
        html = '';
    }

    $("#clientText").val(html);
    $('#templateTextContainer').slideDown(500);

    return false;
});

请帮帮我

3 个答案:

答案 0 :(得分:3)

你可以使用TextVersionJS这是一个解决同样问题的开源库。它不依赖于任何其他库,您也可以在浏览器和node.js中使用它。

答案 1 :(得分:0)

我不知道你是否正在使用jQuery,但有了它,它很简单:

$('a').each(function() {
    var $text = $(this).html();
    var $link = $(this).attr('href');
    $(this).after($text+" ("+$link+")");
    $(this).remove();
});

EDIT3(来自评论的更正错误):

好的,我已经达到了你的需要:

/<\s*a.*?href\s*=\s*(?:"|')(.*?)(?:"|')[^>]*>(.*?)<\s*?\/\s*?a\s*?>/ig

替换将是:

$2 ($1)

以下是一个工作示例:http://regexr.com/38qgv

我还添加了一项检查,以包含格式错误的代码,例如< a href = "">< / a >

答案 2 :(得分:0)

    <!DOCTYPE html>
     <body>
      <div id='tempDiv'></div>
        <script>
          var html
          html='<h3><a href="//stackoverflow.com">current community</a></h3>'
          alert(toText(html))

以下函数将传递给它的任何html内容转换为文本

            function toText(content) {
             document.getElementById('tempDiv').innerHTML = content
             return document.getElementById('tempDiv').textContent
            }
        </script>

     </body>
    </html>