我想测试字符串中是否包含html标签。
html = "<p class=\"c\">some <span>conten<b class=\"i\">t</b></span><p><p>more content</p><p><i>important</i>";
我认为使用find()
或has()
会帮助我做到这一点,但它不起作用。
$(html).find("p") //[]
$(html).has("p") //[]
如果我进行实验,我会得到令人困惑的结果。
$(html).has("p") //[]
$(html).has("*") //array of <p> elements and children
$(html).has("*") == true //false
$(html).has("*").length == true //false ??
为什么我不能使用这些方法来查看我的字符串是否包含HTML标记?
由于
答案 0 :(得分:9)
.has()和.find()都对给定元素的子节点进行操作。要测试元素本身,请使用.is():
$(html).is('p'); // true
$(html).is('div'); // false
$(html).is('*'); // true
...虽然我对后者的用处持怀疑态度,因为它没有专门针对HTML元素进行测试。所以这......
var someMarkup = '<foo"bar"zzz>';
$(someMarkup).is('*');
...也是true
。如果您省略此表达式中的最后一个>
,则您甚至无法到达is
:
var noHtmlJustLt = '<';
$(noHtmlJustLt).is('*'); // Error: Syntax error, unrecognized expression: <
...所以你必须把它包装成try-catch
块。
说实话,我可能用不同的方法解决整个任务(检查一个字符串是否有一些流氓标记):用一个常见的技巧逃避原始文本...
var newHtml = $('<div></div>').html(html).text();
...然后将其与原始html
内容进行比较。如果没有标记符号,则它们应该相等。
答案 1 :(得分:2)