簡體   English   中英

使用jQuery測試字符串是否包含HTML標記

[英]Using jQuery to test if string contains HTML markup

我想測試一個字符串中是否包含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標記?

謝謝

.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內容進行比較。 如果沒有標記符號,則它們應該相等。

filter()is()都 只能在根元素上使用,因此要在整個字符串中搜索標簽,必須將其設置為另一個空元素的innerHTML,然后使用find()搜索find()僅對子元素有效find() ,因此包裝父元素

var has_p = $('<div />', {html : html}).find("p").length > 0;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM