首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用HTML和JS过滤和更改样式?

如何使用HTML和JS过滤和更改样式?
EN

Stack Overflow用户
提问于 2019-10-04 09:20:08
回答 3查看 216关注 0票数 0

我正在做一个项目,在这个项目中我必须过滤页面中的一些元素。我可以设法做到这一点,但我还必须更改元素的宽度,无论它们是否经过过滤。例如,每个元素的宽度为100px,但我希望每三个元素的宽度为300px。

每个显示元素都有一个名为show的类。我所做的就是在.show上添加了300px的样式。但是当我过滤它时,宽度停留在相同的元素上,而不是在第三个.show上。

这是我目前的代码:

代码语言:javascript
运行
AI代码解释
复制
filterSelection("all");

function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("filterDiv");
  if (c == "all") c = "";
  for (i = 0; i < x.length; i++) {
    w3RemoveClass(x[i], "show");
    if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
  }
}

function w3AddClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    if (arr1.indexOf(arr2[i]) == -1) {
      element.className += " " + arr2[i];
    }
  }
}

function w3RemoveClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    while (arr1.indexOf(arr2[i]) > -1) {
      arr1.splice(arr1.indexOf(arr2[i]), 1);
    }
  }
  element.className = arr1.join(" ");
}
代码语言:javascript
运行
AI代码解释
复制
.filterDiv {
      float: left;
      background-color: #2196f3;
      color: #ffffff;
      width: 100px;
      line-height: 100px;
      text-align: center;
      margin: 2px;
      display: none;
    }
    
    .show {
      display: block;
    }
    
    .show:nth-child(3n + 0) {
      width: 300px;
    }
代码语言:javascript
运行
AI代码解释
复制
<body>
  <h2>Filter DIV Elements</h2>

  <div id="myBtnContainer">
    <button class="btn active" onclick="filterSelection('all')">Show all</button>
    <button class="btn" onclick="filterSelection('cars')">Cars</button>
    <button class="btn" onclick="filterSelection('fruits')">Fruits</button>
    <button class="btn" onclick="filterSelection('colors')">Colors</button>
  </div>

  <div class="container">
    <div class="filterDiv cars">BMW</div>
    <div class="filterDiv colors fruits">Orange</div>
    <div class="filterDiv cars">Volvo</div>
    <div class="filterDiv colors">Red</div>
    <div class="filterDiv colors">Blue</div>
    <div class="filterDiv fruits">Melon</div>
    <div class="filterDiv fruits animals">Kiwi</div>
    <div class="filterDiv fruits">Banana</div>
    <div class="filterDiv fruits">Lemon</div>
  </div>

</body>

有没有人能解决这个问题?

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2019-10-04 09:30:01

我认为这些项不能像您所希望的那样显示的原因是,您没有从DOM中删除这些项,而是使用css隐藏它们。这不会影响.show:nth-child(3n + 0)选择器。

我要做的是具体地告诉CSS“容器”中的项应该是什么样子的。例如,可以使用网格来完成此操作。

如果不想使用网格,也可以使用javascript从DOM中删除不应该显示的元素。但在我看来,这并不是最好的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2019-10-04 09:34:45

我所理解的是,你希望过滤后的每个元素都有300px的宽度,一个解决方案可能是:写一个样式:

代码语言:javascript
运行
AI代码解释
复制
.filtered {
width:300px;
}

然后使用

代码语言:javascript
运行
AI代码解释
复制
$("[your-object]").toggleClass("filtered");

要应用效果,请执行以下操作。

票数 0
EN

Stack Overflow用户

发布于 2019-10-04 13:36:33

我的一个朋友帮我找到了一个解决方案,它是有效的,所以我只是把它发布给正在寻找解决方案的人:

CSS:

代码语言:javascript
运行
AI代码解释
复制
.filterDiv {
    float: left;
    background-color: #2196f3;
    color: #ffffff;
    width: 100px;
    line-height: 100px;
    text-align: center;
    margin: 2px;
    display: none;
}

.show {
    display: block;
}

.item1 {
    width: 300px;
}

.item2 {
    width: 150px;
}

JS:

代码语言:javascript
运行
AI代码解释
复制
filterSelection("all");
var count = 0;
function filterSelection(c) {
    clean();
    var x, i;
    x = document.getElementsByClassName("filterDiv");
    if (c == "all") c = "";
    for (i = 0; i < x.length; i++) {
        w3RemoveClass(x[i], "show");
        if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
    }
}
function clean() {
    count = 0;
    document.querySelectorAll(".filterDiv").forEach(it => {
        it.classList.forEach(className => {
            className.startsWith("item") && it.classList.remove(className);
        });
    });
}
function w3AddClass(element, name) {
    var i, arr1, arr2;
    arr1 = element.className.split(" ");
    arr2 = name.split(" ");

    for (i = 0; i < arr2.length; i++) {
        if (arr1.indexOf(arr2[i]) == -1) {
            element.className += " " + arr2[i];
            element.classList.add(getNext());
        }
    }
}

function getNext() {
    if (!count) {
        count = 0;
    }

    if (count >= 6) {
        count = 1;
    } else {
        count += 1;
    }

    return "item" + count;
}

function w3RemoveClass(element, name) {
    var i, arr1, arr2;
    arr1 = element.className.split(" ");
    arr2 = name.split(" ");
    for (i = 0; i < arr2.length; i++) {
        while (arr1.indexOf(arr2[i]) > -1) {
            arr1.splice(arr1.indexOf(arr2[i]), 1);
        }
    }
    element.className = arr1.join(" ");
}

但是谢谢你的回答!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58233446

复制
相关文章
React技巧之将CSS作为props传递
原文链接:https://bobbyhadz.com/blog/react-pass-style-as-props-typescript[1]
chuckQu
2022/08/19
2.6K0
React技巧之将CSS作为props传递
React技巧之将函数作为props传递
原文链接:https://bobbyhadz.com/blog/react-typescript-pass-function-as-prop[1]
chuckQu
2022/08/19
1K0
React技巧之将函数作为props传递
C++返回vector/将vector作为参数传递
在C++里很多时候我们会遇到函数想返回两个以上结果的情况,这时候可以用数组(vector)、类来作为容器返回,也可以声明一个全局变量的数组,将数值存放在数组里解决。
vincentbbli
2021/08/18
5.6K0
Vue 中,如何将函数作为 props 传递给组件
作者:Michael Thiessen 译者:前端小智 来源:medium 点赞再看,养成习惯本文 GitHub https://github.com/qq44924588... 上已经收录,更多往
前端小智@大迁世界
2020/05/18
8.4K0
Powershell中的变量
在我们的迷你系列“Variables in Shells”中,了解如何在PowerShell中处理局部变量。
QRosie
2019/11/24
3.1K0
Powershell中的变量
为什么将Salesforce作为你的职业选择
Salesforce提供功能完善的销售,市场,服务,协同,安全以及分析功能,同时你还可以在Salesforce1的平台上创建自己的解决方案。Salesforce适合从初创企业到世界500强的不同规模企业使用。
臭豆腐
2019/04/16
8950
为什么将Salesforce作为你的职业选择
Python 函数作为参数传递
#map()的功能是将函数对象依次作用于表的每一个元素,每次作用的结果储存于返回的表re中。 #map通过读入的函数(这里是lambda函数)来操作数据 def test_func_map():     re = map((lambda x: x+3), [1, 2, 3, 4])     print re def testA(a, b, **kargs):     print a+b     print "testA: %s" % kargs #函数作为参数传递 def test_func(func, a, b, **kargs):     func(a, b)     print "test_func: %s" % kargs #函数作为参数传递 def test_func_lambda(func, **kargs):     func()     print "test_func_lambda: %s" % kargs def test_func_getattr():     func = getattr(obj, "testA")     func(1, 2) class TestGetattr():     aa = "2a"     def get_attr(self):         print "test getattr()"     def print_text(self):         print "print text"     def print_string(self):         print "print string" #getattr(obj, "a")的作用和obj.a是一致的,但该方法还有其他的用处,最方便的就是用来实现工厂方法 #根据传入参数不同,调用不同的函数实现几种格式的输出 def output(print_type="text"):     tg = TestGetattr()     output_func = getattr(tg, "print_%s" % print_type)     output_func() if __name__ == "__main__":     #test_func(testA, 1, 2, aa="aa")     #test_func_lambda((lambda: testA(1, 2, bb="bb")), cc="cc")     #test_func_map()     #test_func_getattr()     #getattr方法,传入参数是对象和该对象的函数或者属性的名字,返回对象的函数或者属性实例     obj = TestGetattr()     func = getattr(obj, "get_attr") #getattr()获得对象的属性和方法     func()     print getattr(obj, "aa") #完成对象的反射     print obj.aa     #callable方法,如果传入的参数是可以调用的函数,则返回true,否则返回false。     print callable(getattr(obj, "aa"))     output("string")
py3study
2020/01/09
3.1K0
选择篇(094)-哪个选项是将hasName设置为true的方法,前提是不能将true作为参数传递?
使用逻辑非运算符!,将返回一个布尔值,使用!! name,我们可以确定name的值是真的还是假的。如果name是真实的,那么!name返回false。 !false返回true。
齐丶先丶森
2022/12/05
2.2K0
临时变量作为非const的引用进行参数传递引发的编译错误
Linux环境运行,使用g++编译,观察如下代码,会出现: invalid initialization of non-const reference of type ‘std::string&’ from a temporary of type ‘std::string’的错误。
恋喵大鲤鱼
2018/08/03
2.6K0
Go-函数作为参数传递
编码过程中业务需要将一个函数,作为参数传递到函数内部。Go 语言的匿名函数是一个闭包(Closure)
王小明_HIT
2023/03/01
1.7K0
Go-函数作为参数传递
python argparse 无法传递bool
在使用argparse时发现无法传递bool型变量,无论命令行输入True还是False,解析出来之后都是True,代码如下
羽翰尘
2019/11/19
1.7K0
shell 循环变量传递问题
定义为环境变量没有用的,环境变量只是在子进程创建的时候可以从父进程复制到子进程,它无法实现从子进程往父进程传递,也不能在子进程运行期间从父进程获得新值。
全栈程序员站长
2022/09/15
9840
通过 JavaScrpit 传递 Post 变量
使用 Get 方式方式传递变量会把 URL 搞得很长,而且 IE 会对长度有限制,所以最好的方式还是通过 Post 方式来传递变量。但是通过 Post 来传递变量的时候一定要有个表单,很多时候页面上并没有表单,所以这个时候可以隐藏表单,然后通过 JavaScript 来提交表单。下面是个隐藏表单的例子:
Denis
2023/04/13
7230
linux/bash:map作为参数传递给function
在linux bash中map是作为数组处理的,不能作为参数直接传递函数,如果一定要传递给函数,要做一些变通处理,示例如下:
10km
2019/08/14
2.7K0
【Python】函数进阶 ③ ( 函数作为参数传递 )
之前介绍的函数 , 都是 接收具体的 变量 或 字面量 数据 作为参数 , 如 : 数字 / 布尔值 / 字典 / 列表 / 元组 等 ;
韩曙亮
2023/10/11
5460
【Python】函数进阶 ③ ( 函数作为参数传递 )
PowerShell: 作为一个PowerShell菜鸟,如何快速入门?掌握这些就够了「建议收藏」
可能大家看到这个标题要说我是标题党了,不过没关系了。这篇文章算是我的处女作,所以再怎么花哨我都不觉得过分。好啦,废话不多讲。
全栈程序员站长
2022/11/01
5.1K0
PowerShell: 作为一个PowerShell菜鸟,如何快速入门?掌握这些就够了「建议收藏」
Python 模块之间传递变量
最近在做实验时发现个问题,我想在一个模块中调用另一个模块的变量,首先想到了用return 
py3study
2020/01/10
3.8K0
『debug心路』powershell 中无法激活 conda 环境
工作需求原因,拿到一台新电脑,首先需要安装 python 。一般地,我用 conda 管理自己的 python 环境。
Piper蛋窝
2021/02/12
4.8K0
『debug心路』powershell 中无法激活 conda 环境
将PowerShell脚本编码到PNG文件
Invoke-PSImage接收一个PowerShell脚本,并将脚本的字节编码为PNG图像的像素。它生成一个oneliner,用于从文件或从网络上执行。
Khan安全团队
2021/03/10
1.4K0
下篇1:将 ConfigMap 中的键值对作为容器的环境变量
继续接上篇,《一文了解K8S的ConfigMap》。上篇聊过,官方文档中提到的可以使用下面4种方式来使用 ConfigMap 配置 Pod 中的容器:
不背锅运维
2023/05/26
2.3K0
下篇1:将 ConfigMap 中的键值对作为容器的环境变量

相似问题

将PowerShell变量作为cmdlet参数传递

45

Powershell -无法将变量传递给commandlet

118

将path作为powershell脚本中的变量传递

20

将组合框选择作为变量传递?

31

将变量作为Powershell中的开关参数传递

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档