內部HTML我有此DIV:jquery的刪除HTML元素(jquery對象)
<div class="teaser">
<img src="thumb1.jpg"><img src="thumb2.jpg"><br> // usually one thumb image; can be up to three
some text goes here, sometimes not<br>
<a href="example.html">always a link here</a><br>
and sometimes another line here
</div>
我需要捕獲DIV減去在一個變量中的第一行(拇指)的含量,以傳作爲標題(標題)添加到燈箱腳本。然而,在一天,我學會了一些JavaScript的&的jQuery(都是我的弱點),但沒有我在網上搜索,其中包括幾個線程這裏計算器,做了它,要麼拋出錯誤或仍包括拇指發現或清除文字也一樣,甚至從DOM移除了大拇指:
// takes the whole
var teaser = $(".teaser");
// TypeError: $(...).html(...).find is not a function
var teaser = $(".teaser").find("img").remove();
// IMGs removed from DOM
var teaser = $(".teaser").find("img").remove();
// IMGs still included; I think I understand why
var teaser = $(".teaser").not("img");
// ditto
var teaser = $(".teaser").clone().not("img");
// ditto:
var teaser = $(".teaser");
$(teaser).find("img").remove();
// no teaser at all (everything removed, not just the IMGs)
var teaser = $(".teaser");
teaser = $(teaser).find("img").remove();
// ditto
var teaser = $(".teaser").clone().find("img").remove();
改變chainings序列時沒有工作,要麼(雖然我可能已經錯過了一個或其他)。
這種解決方法似乎是確定:
var teaser = $(".teaser").html().replace(/(<img.*?)+<br[^>]*?/i,"");
然而,依賴於瀏覽器中的正則表達式實現它可能是不穩定的,所以我寧願有一些更穩健,特別是沒有得到第一線的。
TIA的任何建議 - 希望我能說清楚了。
編輯:
使用clone()
連同children()
或contents()
讓我進了一步。然而,這些也將刪除第一個文本節點,留下兩個空BR
背後:
$("div.teaser").each(function() {
var teaser = $(this).clone().children().not("img");
var teaser = $(this).clone().contents().not("img");
});
OTOH filter("img")
,find("img")
或not("img")
其次remove()
去除一切,但IMGS,這超出了我的頭,除了not()
var teaser = $(this).clone().find("img").remove();
編輯2:
爲了總結的東西了:
這是@karaxuna建議的解決方案。重新分配變量很重要。
var teaser = $(this).clone();
teaser.find("img,br:first").remove();
teaser = $.trim(teaser.html());
雖然做了一些進一步的閱讀,以便更好地理解失敗背後的邏輯和最終解決方案,我得到了一個線索做稍微更jquerish:
var teaser = $(this).clone();
teaser = $.trim($("img,br:first",teaser).remove().end().html());
的線索範圍,或上下文,添加到$()
選擇器。使用這這裏爲大家熟悉,但它從來沒有想過我使用var。此外,end()
將繼續remove()
從一路還是要到DOM ...
$.trim
技術上沒有必要,當然,HTML忽略空行呢。
因此包括與正則表達式以上的解決方法至少有三種方式去 - 有點讓我想起的Perl;)
由於雙方@karaxuna和@Ravi分享他們的經驗和想法!
你說得對的HTML()和我刪除它。這只是在replace()的解決方法中需要的。 – JayAitch 2013-03-07 15:38:03
這完全消除了IMG。 'var teaser = $(「teaser」)。clone()。find(「img」)。remove();'保留IMG,但刪除文本(sic!)而var teaser = $(「teaser」) .clone()。not(「img」);'保留整個DIV(高於我的頭),使用'filter(「img」)'代替結果沒有標題(有意義)。 – JayAitch 2013-03-07 15:45:14
@JayAitch查看問題編輯 – karaxuna 2013-03-07 16:41:14