Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if a text is HTML or not

I am using Meteor and I am trying to check if a text is html. But usual ways do not work. This is my code:

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;
}

Actually, this is the most "working" solution I have used up to now. Also, I pointed out the two most common ways which I use (next to the if statement). Is it possible to happen without regex.

like image 315
StefanL19 Avatar asked Feb 05 '16 22:02

StefanL19


People also ask

How do you check HTML tags?

The valid HTML tag must satisfy the following conditions: It should start with an opening tag (<). It should be followed by a double quotes string or single quotes string. It should not allow one double quotes string, one single quotes string or a closing tag (>) without single or double quotes enclosed.

How do you check if a text is in a string JavaScript?

In JavaScript, the includes() method determines whether a string contains the given characters within it or not. This method returns true if the string contains the characters, otherwise, it returns false.

Does HTML have strings?

Unlike most HTML parsers which generate tree structures, HTMLString generates a string of characters each with its own set of tags. This flat structure makes it easy to manipulate ranges (for example - text selected by a user) as each character is independent and doesn't rely on a hierarchical tag structure.


2 Answers

Can use approach you already started with jQuery but append response to a new <div> and check if that element has children. If jQuery finds children it is html.

If it is html you can then search that div for any type of element using find().

// 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');
}
like image 76
charlietfl Avatar answered Oct 13 '22 18:10

charlietfl


Use the jquery $.parseHTML function to parse the string into an array of DOM nodes and check if it has any 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>
like image 32
stomtech Avatar answered Oct 13 '22 18:10

stomtech