开发者问题收集

在 js 中更改类样式

2017-10-12
93

我想改变一个类的样式,我知道这是一个非常简单的问题,但已经尝试过谷歌并且找不到如何做到这一点,这是我的代码但它不起作用我得到语法错误

$(window).scroll(function() {
  if ($(this).scrollTop()> 620) {
        document.getElementsByClassName("advanced-search").style.position = ¨sticky;¨
    $('.advanced-search').fadeIn();
   } 
3个回答

document.getElementsByClassName 返回 HTMLCollection ,它是一个类似数组的对象。它不具有 .style.position 属性。由于您已经在使用 jQuery,因此只需使用它来查询选择器即可。

var $el = $('.advanced-search');
$el.css('position', 'fixed');
$el.fadeIn();
pizzarob
2017-10-12

来自 MDN ,重点是我的:

Returns an array-like object of all child elements which have all of the given class names.

style 不是列表的属性;您必须遍历每个元素并应用样式,或者从列表中选择一个元素。

一种方法是将 getElementsByClassName 的结果转换为数组并对其进行迭代:

var advSearches = document.getElementsByClassName('advanced-search');

advSearches = Array.prototype.slice.call(advSearches);

advSearches.forEach(function(element) {
    element.style.position = 'sticky';
});

或者,使用 ES6 解构进行压缩:

[...document.getElementsByClassName('advanced-search')]
    .map(e => e.style.position = 'sticky');
chazsolo
2017-10-12

document.getElementsByClassName("advanced-search") 是一个数组,您不能像以前那样直接为所有元素添加样式! 使用 for loopforeach

$(window).scroll(function() {
  if ($(this).scrollTop()> 620) {
        var x = document.getElementsByClassName("advanced-search");
        for(var i=0;i<x.length;i++){
            x[i].style.position = ¨sticky;¨
        }
        $('.advanced-search').fadeIn();
   }
});
Alireza Kavian
2017-10-12