2013-07-12 86 views
1

我使用JQuery的.append()和.remove()函數來添加和刪除div的變量。快速解決JQuery的.remove()在DOM中留下空白的問題?

所以DIV看起來有點像這樣當事情裏面:

<div id="list"> 
    <a>var1</a> 
    <a>var2</a> 
    <a>var3</a> 
</div> 

問題是,當我對在div的東西用一個.remove(),它留下DOM中的空間。所以它看起來像這樣:

var1 

var3 

我明白爲什麼會這樣,但有沒有與其他jQuery函數,可能使這樣的DIV輸出後,我用一個.remove()來解決這個問題的簡單方法:

var1 
var3 

或者我需要做更復雜的事情嗎?

+4

你是什麼意思「在DOM中」?就像在源代碼查看器中一樣,或者您在渲染頁面中看到了空格?你能演示一下這種情況嗎?我從來沒有聽說過這個。 – Mathletics

+1

jquery沒有離開這個空間。剩下的就是換行符,因爲所有jQuery關心的是元素本身。一種選擇是選擇子元素,分離它們,清空div,然後將它們追加回div。這樣做當然會失去所有新的字符,不僅僅是額外的字符。 –

+1

你可以發佈[小提琴](http://jsfiddle.net)? – Doorknob

回答

3

因爲你的元素實際上被包含在包含換行符的文本節點中,因爲它就是你的html所說的。如果你不相信我:http://tinker.io/7f667/1

\n<a>var1</a>\n<a>var2</a>\n<a>var3</a>\n 

你不會注意到他們在顯示,因爲HTML不是(通常)空格敏感。

如果你想刪除周圍的換行符,然後告訴DOM將其刪除:http://tinker.io/7f667/2

//assuming `list` is your container, and `toRemove` is the element to be removed 
list.removeChild(toRemove.previousSibling); 
list.removeChild(toRemove.nextSibling); 
list.removeChild(toRemove); 

應該是微不足道的,以將其轉換成jQuery代碼,如果你選擇。請注意周圍的文本節點是而不是元素。

0

最簡單的方法是在其中插入parent()以刪除父容器,而不是僅刪除該變量。

所以,如果你的代碼是這樣的:

$(myVar).remove(); 

...它改成這樣:

$(myVar).parent().remove(); 

別的東西,如果你需要保留特定的父母是否存在等,你可以做容器(比如你可能會添加一些東西)是爲隱藏容器的父類添加一個類(並且因此需要刪除的變量),但是可以重新填充並稍後再次顯示。

.deactivated { display:none; } 

$(myVar).parent().addClass('deactivated'); 

......再後來,你可以這樣做:

$(myVar).parent().html(newValue).removeClass('deactivated'); 

已經寫了這麼多,你應該很可能緩存父本身作爲一個獨立的變量..但你的想法。

+0

要麼我沒有很好地理解這個問題,要麼你的回答對於問題已經太多了。 :D – Learner

+0

他爲什麼要刪除父級來隱藏var2但不隱藏var1或3?這沒有任何意義.. –

+0

@KevinB在他的情況下,「父母」是錨標籤。他正在移除的變量只是錨標記的內容,所以他得到空白空間,因爲他將空錨標記留在標記中。以家長爲目標定位錨點,而不僅僅是錨點的內容,使頁面按照他所希望的方式流動。 – relic

0
<div id="list"> 
    <a>var1</a> 
    <a>var2</a> 
    <a>var3</a> 
</div> 

<script type='text/javascript'> 
var var_to_remove = "var2"; 
//the anchor with var2 should be removed 
$("#list > a").each(function() 
{ 
    if($(this).text() == var_to_remove) 
    { 
    $(this).detach(); 
    } 
}); 
</script> 

你顯然會可能要改變了jQuery,使我假設你希望它是一個單擊處理什麼的var_to_remove不是硬coded..and但這是另一種方式來做到這一點...