设置html时的验证

validation when setting html

本文关键字:验证 html 设置      更新时间:2023-09-26

我有一些代码,可以从服务器端获取电子邮件,并将其显示在表中,当选择其中一个时,我会在表下方显示该电子邮件的正文。问题是,有些电子邮件包含糟糕的html(例如,打开标签时没有匹配的关闭标签),这会在我的网站上造成一些恶劣的副作用。(例如,无法使用ajax调用调用服务器端)。

 createTable: function () {
        Loader.show();
        var html = '<span id="correspondenceTt">Correspondence History</span><table id="correspondence"><tr class="th"><th class="from">From</th><th class="to">To</th><th>Subject</th><th class="date">Date</th><th class="attachments">Attachments</th></tr>';
        for (var i = 0; i < mailViewer.mails.length; i++) {
            var mail = mailViewer.mails[i];
            html += '<tr id="' + i + '" class="odd">';
            html += mailViewer.reduceEmailList(this.fixMailAddress(mail.From), 30);
            html += mailViewer.reduceEmailList(this.fixMailAddress(mail.To), 30);
            html += mailViewer.reduceSection(mail.Subject, 45);
            html += mailViewer.reduceSection(d.toLocaleString(), 21);
            html += '<td class="att" id="' + mail.Id + '">';           
            html += '<div class="eml" id="' + i + 'html">' + '   ' + mail.Body + '</div></td></tr>';
        }
        html += '</table><div id="dipEmail" style="margin-top:' + Math.min(mailViewer.mails.length * 28 + 23, 248) + 'px;"><div id="mailContainer"></div></div>';
        mailViewer.setHtml(html);

现在我的问题是,我如何清理电子邮件的html,或者将其设置在一个元素中,使其不会影响我网站的包装html?

您可以将内容注入容器,然后调用normalize()方法。这将返回一个有效的内容,该内容可以删除以合并到您的模板中。这是一个例子:

// Container element
var element = document.createElement('DIV');
var html = '<table><tr><td>ola</tr>';
element.innerHTML = html;
// Normalize
element.normalize();
console.log(element.innerHTML);
// return: <table><tbody><tr><td>ola</td></tr></tbody></table>