2012-07-02 78 views
0

問題:$(".price").hide();應用於已渲染的元素,但是,當我通過javascript加載新模板時,價格類將可見。應用樣式,無論元素是否已通過jQuery添加到DOM

問題:有沒有一種方法可以在插入到DOM中時將類型應用於所有將來的類實例。

例子:

$(".price").hide(); 
$('body').append('<div class="price">19.00</div>'); // this should be hidden. 
+0

你的意思是*無論*如果元素被添加與jQuery或*當且僅當*中已經加入了jQuery的元素。如果答案是無論如何,爲什麼不讓價格類別顯示:無? – aquinas

+0

我有一個價格的知名度撥動開關,當這個應用程序是使用jQuery.tmpl()來加載不幸的是新的模板。因此,根據交換機的不同,我爲未來添加到DOM的所有類設置了可見性。 – Fostah

+0

然後我提出你正在努力。看到我的答案在下面。 – aquinas

回答

1

而是做這種方式的,讓你的撥動開關修改容器添加或刪除類的元素。

然後,有一個CSS規則是這樣的:

.hidePrice .price{ 
    display:none; 
}​ 

當您切換您的按鈕,只需撥動您的容器元素上hidePrice類。

參見: http://jsfiddle.net/bXChZ/

1

我認爲最好的辦法是使用一個輔助類:

CSS

.helper{ 
    display: none; 
} 

jQuery的

$(".price").addClass('helper'); //for dyanmic addition to certain classes 
$('body').append('<div class="price helper">19.00</div>'); //for adding afterward 
+0

唯一的問題是,模板已經定義,它需要更多的工作申請此類渲染後。但很酷的想法。 – Fostah

3

您應該能夠用來做到這一點。

$('.price').livequery(function() { 
    $(this).hide(); 
}); 

好處是,這將覆蓋現有的以及添加到DOM的任何新元素。

編輯:正如其他人指出livequery是爲jQuery 1.3-1.4編寫的。所以我不確定它對你的情況有多大用處。 讓我看看是否有任何等效的1.7.2。關於在jQuery 1.7+中模仿livequery的功能的更多信息,請看this answer

+1

呵呵。有趣。 +1 – ramblinjan

+0

你確定這將適用於jQuery 1.7.2嗎?它被寫爲1.3 - 1.4。 – Blender

+0

@Blender好吧,廢話。我以前用過這個,但是我沒有注意到我注意到了什麼版本的jQuery。讓我檢查,如果它在1.7.2 –

0

這爲我工作:

使用jQuery:

$('<style id="priceVisibility">div.results .price {display: none; }</style>').appendTo('head'); 

沒有jQuery的:

// Appending style element to the head with a overriding style. 
var style = document.createElement('style'); 
style.type = 'text/css'; 
style.id = 'priceVisibility'; 
style.innerHTML = 'div.results .price {display: none; }'; 
document.getElementsByTagName('head')[0].appendChild(style); 
0

你可以只添加一個類的<身體>標籤,然後隱藏與CSS的。價格要素。例如。

的jQuery:

$('body').addClass('hide-price'); 

CSS:

.price {display: block} 
.hide-price .price {display: none} 
相關問題