使用jQuery测试字符串是否包含HTML标记

125*_*748 4 html javascript jquery

我想测试一个字符串是否包含html标签.

html = "<p class=\"c\">some <span>conten<b class=\"i\">t</b></span><p><p>more content</p><p><i>important</i>";
Run Code Online (Sandbox Code Playgroud)

我认为使用其中任何一个find()或者has()会帮助我这样做,但它不起作用.

$(html).find("p") //[]
$(html).has("p")  //[]
Run Code Online (Sandbox Code Playgroud)

如果我做实验,我会得到令人困惑的结果.

$(html).has("p") //[]
$(html).has("*") //array of <p> elements and children
$(html).has("*") == true //false
$(html).has("*").length == true //false ??
Run Code Online (Sandbox Code Playgroud)

为什么我不能使用这些方法中的任何一个来查看我的字符串是否包含HTML标记?

谢谢

rai*_*7ow 9

两者.先后().find()给定元素的子节点上运行.要测试元素本身,请使用.is():

$(html).is('p');   // true
$(html).is('div'); // false
$(html).is('*');   // true
Run Code Online (Sandbox Code Playgroud)

...虽然我对后者的实用性持怀疑态度,因为它没有专门针对HTML元素进行测试.所以这...

var someMarkup = '<foo"bar"zzz>';
$(someMarkup).is('*');
Run Code Online (Sandbox Code Playgroud)

......也是true.如果省略>此表达式中的最后一个,则您甚至无法达到is:

var noHtmlJustLt = '<';
$(noHtmlJustLt).is('*'); // Error: Syntax error, unrecognized expression: <
Run Code Online (Sandbox Code Playgroud)

...所以你必须把它包装成try-catch块.


说实话,我可能用不同的方法解决整个任务(检查一个字符串是否有一些流氓标记):用一个常见的技巧逃避原始文本......

var newHtml = $('<div></div>').html(html).text();
Run Code Online (Sandbox Code Playgroud)

...然后将其与原始html内容进行比较.如果没有标记符号,它们应该相等.