检查文本是否为HTML

时间:2016-02-05 22:28:55

标签: javascript jquery html meteor

我正在使用Meteor,我正在尝试检查文本是否为html。但通常的方法不起作用。这是我的代码:

post: function() {
    var postId = Session.get("postId");
    var post = Posts.findOne({
        _id: postId
    });
    var object = new Object();
    if (post) {
        object.title = post.title;
        if ($(post.content).has("p")) { //$(post.content).has("p") / post.content instanceof HTMLElement


            object.text = $(post.content).text();


            if (post.content.match(/<img src="(.*?)"/)) {
                object.image = post.content.match(/<img src="(.*?)"/)[1];
            }
        } else {
            console.log("it is not an html------------------------");
            object.text = post.content;
        }
    }
    return object;
}

实际上,这是我迄今为止使用过的最“有效”的解决方案。另外,我指出了我使用的两种最常见的方法(在if语句旁边)。是否有可能在没有正则表达式的情况下发生。

2 个答案:

答案 0 :(得分:7)

可以使用已经开始使用jQuery的方法,但是将响应追加到新的<div>并检查该元素是否有子节点。如果jQuery找到孩子,那就是html。

如果是html,则可以使用find()在该div中搜索任何类型的元素。

// create element and inject content into it
var $div=$('<div>').html(post.content);
// if there are any children it is html
if($div.children().length){
   console.log('this is html');
   var $img = $div.find('img');
   console.log('There are ' + $img.length +' image(s)');
}else{
   console.log('this is not html');
}

答案 1 :(得分:0)

使用jquery $.parseHTML函数将字符串解析为DOM个节点的数组,并检查其是否包含任何HTMLElement

var htmlText = "----<b>abc</b>----<h3>GOOD</h3>----";
htmlText = prompt("Please enter something:", "----<b>abc</b>----");

var htmlArray = $.parseHTML(htmlText);

var isHtml = htmlArray.filter(function(e){ return e instanceof HTMLElement;}).length;

console.log(htmlText);
//console.log(htmlArray);

if (isHtml)
  console.log(isHtml + " HTML Element(s) found.");
else
  console.log("No HTML Elements found!");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>