2013-08-24 140 views
30

我试过了下面的代码,但它是doesn't work。任何想法我错了?在纯Javascript中按类隐藏元素

document.getElementsByClassName('appBanner').style.visibility='hidden';
<div class="appBanner">appbanner</div>

使用jQuery或更改HTML是不可能的,因为我在Objective-C使用[self->webView stringByEvaluatingJavaScriptFromString:@""];

+1

getElementsByClassName方法返回元件的阵列。你需要像这样:document.getElementsByClassName('appBanner')[0] .style.visibility ='hidden'; – bitfiddler

回答

54

document.getElementsByClassName返回与类名匹配的所有元素的HTMLCollection(类似数组的对象)。 style属性定义为Element而不是HTMLCollection。您应该使用括号(下标)符号访问第一个元素。

document.getElementsByClassName('appBanner')[0].style.visibility = 'hidden'; 

Updated jsFiddle

要更改匹配类的所有元素的样式规则,使用选择器API:

[].forEach.call(document.querySelectorAll('.appBanner'), function (el) { 
    el.style.visibility = 'hidden'; 
}); 

如果for...of可用:

for (let el of document.querySelectorAll('.appBanner')) el.style.visibility = 'hidden'; 
+0

fedeetz/Atanas Korchev提供了更直接的答案24AUG2013。首选。 – treeFan

+0

请注意,这只会隐藏类名为'appBanner'的第一个元素 – HoffZ

21
var appBanners = document.getElementsByClassName('appBanner'), i; 

for (var i = 0; i < appBanners.length; i ++) { 
    appBanners[i].style.display = 'none'; 
} 

JSFiddle.

+0

我是JS的初学者,但是为什么你在第一行写',i;'?这用于循环? (但是我们稍后在循环中声明'i')或者它是一个小错误?或者,也许它的一些“最佳做法”?请你评论一下。 –

+1

@DenisSavenko它只是声明第二个变种。 – Joshpbarron

+3

@DenisSavenko - 用'var'语法来声明多个用逗号分隔的变量是有效的,但是在这种情况下,在'for'循环中用'var'声明'i'也是一个错误 - 虽然这不会'实际上会导致错误,这只是不整洁。 – nnnnnn

1

Array.filter(document.getElementsByClassName('appBanner'), function(elem){ elem.style.visibility = 'hidden'; });

叉形@http://jsfiddle.net/QVJXD/

+0

FYI:Array.filter不是一个JS函数。看起来这是使用Mootools。 –

+0

'Array.Filter'不能使用Javascript – user4943236

-5
<script type="text/javascript"> 
     $(document).ready(function(){ 

       $('.appBanner').fadeOut('slow'); 

     }); 
    </script> 

<script type="text/javascript"> 
     $(document).ready(function(){ 

       $('.appBanner').hide(); 

     }); 
    </script> 
+0

OP没有提到jQuery –