2013-01-22 65 views
0

我知道有很多方法可以在jQuery中做show hide,但我只是想知道爲什麼在下面不工作。我得到的翻譯:作爲警告,試圖到調試的顯示隱藏腳本在JQuery中不起作用?

alert($("div.$(this).attr('class')")) 

我的劇本的時候是這樣如下:

$(".blocks").hide(); 
$("div.$(this).attr('class')").show(); 

任何想法,如何解決這個問題,或者確保alert($("div.$(this).attr('class')"))回報類名而不是對象對象。

+0

你想做什麼? – Blender

回答

3

你應該在連接字符串:

$("div." + $(this).attr('class')).show(); 

或:

$("div." + this.className).show(); 

注意alert()回報[Object object]的對象,請使用console.log()代替。

5

你的方式,$(this).attr('class')是字面意思。這只是一個字符串。

您需要連接它:

$("div." + $(this).attr('class')).show(); 
+0

但我得到了一個對象的警報,而不是任何字符串,所以我們不能嵌套div,例如雖然腳本可以工作,但我在這裏也得到了對象作爲警告$(this).parent()。next()。find($ (本).attr( 「類」));爲什麼? – Mike

+1

因爲'$(this)'是一個對象,'$(this)'是字符串'$(this)''。字符串只是字符串。 – Blender

+0

我想我沒有正確地問,我怎麼會得到下面的返回className而不是對象。 $(this).parent()。next()。find($(this).attr(「class」)) – Mike

3

不能嵌套$(this)你選擇這樣的內部。

$("div." + $(this).attr('class')).show(); 
+0

你知道爲什麼我們不能用$ this來嵌套元素嗎? – Mike

+0

這是因爲你正在使用的jQuery選擇器需要一個字符串(以及其他選擇:dom元素,jQuery對象等)。在字符串中沒有$(this)的概念。它只會被解析爲一個字符串文字。 – ryan

1

只要是不同的......

$("div." + this.className).show(); 

如果你沒有jQuery的...

[].forEach.call(document.querySelectorAll("div." + className), function(element) { 
    element.style.display = ""; 
}); 

如果你被困在舊的瀏覽器土地...

var div = document.getElementsByTagName("div"); 

for (var i = 0, len = div.length; i < div; i++) { 
    if (div[i].className == className) { 
     div[i].style.display = ""; 
    } 
} 

display屬性設置爲空字符串使其使用該元素的默認值。

+0

你搖滾,但你可以拋出一些第二個腳本,我的意思是forEach.call – Mike

+0

@Mike'querySelectorAll'不返回一個數組,但是一個'NodeList',所以你不能調用'forEach()'on它。相反,我們直接調用'forEach()',並將返回的'NodeList'作爲其上下文。 – alex