【问题标题】:How to hide certain numbers of divs generated from array loop using template literal如何使用模板文字隐藏从数组循环生成的特定数量的 div
【发布时间】:2019-01-31 03:00:38
【问题描述】:

我正在尝试通过将每个项目的对象添加到数组中来轻松地将项目添加到我的投资组合中,问题是我只想显示三个项目,并且每当有人点击它显示的按钮时这一切

我尝试使用“break” 还尝试制作一个布尔变量 没用

let arrname = [
	{name: "project one"}, 
  {name: "project two"},
	{name: "project three"},
	{name: "project four"},
	{name: "project five"},
	{name: "project six"}
];

for(let i=0; i < arrname.length; i++){

		let stmain = `
		<div id="main" class="main">
  		<div class="img"></div>
  		<div class="info">
   			<p>${arrname[i].name}</p>
  		</div>
		</div>
	`;
		mylist = document.getElementById('test');		
		mylist.insertAdjacentHTML('beforeend', stmain);
}	
.main{
  width: 300px;
  height: 300px;
  margin: 2rem auto;
  background-color: #2b2b2b;
  color: #ffffff;
	
}
.img{
  width: 100%;
  height: 80%;
  background-color: #dddddd;
}
.info{
  padding-left: 20px;
}
button{
	position: fixed;
	top: 0;
}
<div id="test"></div>
<button id="btun">show more/less</button>

【问题讨论】:

  • 所以总共只有6个项目?如果没有,当有 7 个时你想要如何显示?
  • 这只是我的投资组合的一个例子,它会更多,可能会从小屏幕到大屏幕有所不同,但实际上是一样的,所以说我只想显示前三个然后点击按钮显示所有这些
  • i &lt; arrname.length更改为i &lt; 3
  • @zer00ne 恐怕这不会有太大作用,它总是三个,这不是我需要的
  • @KhaledMahfoz "...我只想显示三个项目" ".. 我想在点击按钮时只显示前三个。 ..”

标签: javascript arrays template-literals


【解决方案1】:

不会是最好的脚本,但希望这能让您进一步了解您需要什么

对于 js

    const projects2show = 3;
    let arrname = [
        { name: "project one" },
        { name: "project two" },
        { name: "project three" },
        { name: "project four" },
        { name: "project five" },
        { name: "project six" },
        { name: "project seven" },
        { name: "project eight" },
    ];

    for (let i = 0; i < arrname.length; i++) {

        let stmain = `
    <div id="${i + 1}" class="main hide">
    <div class="img"></div>
    <div class="info">
        <p>${arrname[i].name}</p>
    </div>
    </div>
`;
        mylist = document.getElementById('test');
        mylist.insertAdjacentHTML('beforeend', stmain);
    }


    function showProjects() {
        const projects = document.getElementsByClassName('hide');
        for (let i = 0; i < projects2show; i++) {
            if (projects[0]) projects[0].classList.remove('hide');
        }
    }
    showProjects();


    const show = document.getElementById('btun');
    show.addEventListener('click', () => {
        showProjects();
    })

对于 css 我刚刚添加了这个

.hide {
    display: none;
}

基本上我在开始时隐藏所有项目,然后只显示前 3 个。 单击按钮时,获取所有隐藏的,然后显示前三个,再次单击时,执行相同操作

再次,只是希望这会给你一些想法

【讨论】:

  • 首先,感谢您的时间和精力,这给了我一两个我希望的想法,但我不想每次都显示 3 个 div,我只想显示第一个3 然后当点击按钮时显示其余部分,当再次点击时再次折叠到前 3 ..
  • @KhaledMahfoz 明白你的意思,但你还必须考虑一些用户案例,正如我之前提到的,如果有 7 个或 8 个以上的项目会怎样。如果只显示三个然后单击显示所有 8+ 另一个单击再次显示三个。作为用户,我会说这有点奇怪,但它当然是可行的。让我稍后添加代码。
  • @KhaledMahfoz 我能想到的并给您一个想法是检查单击时显示了多少个项目,如果项目显示长度为 3,则显示其余项目,如果超过 3 个则隐藏其余项目跨度>
  • 我实际上正在考虑按照您的方式进行操作,我认为这会对用户体验有所帮助,所以谢谢您,我实际上发现我认为这不是最佳实践,因为它有点混乱,但仅此而已如果您对如何改进代码有任何建议,我将不胜感激:')
【解决方案2】:

我想通了

let arrname = [
	{name: "project one"}, 
  {name: "project two"},
	{name: "project three"},
	{name: "project four"},
	{name: "project five"},
	{name: "project six"}
];

for(let i=0; i < arrname.length; i++){
		
		let stmain = `
		<div id="main" class="main">
  		<div class="img"></div>
  		<div class="info">
   			<p>${arrname[i].name}</p>
  		</div>
		</div>
	`;
		mylist = document.getElementById('test');		
		mylist.insertAdjacentHTML('beforeend', stmain);
}

let bool = false;

function myFunc(){
	for(let x = 3; x < arrname.length; x++){
		if(bool == false){
			document.getElementsByClassName("main")[x].classList.add("hide");
		}else{
			document.getElementsByClassName("main")[x].classList.remove("hide");
		}
	}
}
myFunc();


let btn = document.getElementById("bton");
btn.onclick = function(){
	bool = !bool;
	myFunc();
}
.main{
  width: 300px;
  height: 300px;
  margin: 2rem auto;
  background-color: #2b2b2b;
  color: #ffffff;
	
}
.img{
  width: 100%;
  height: 80%;
  background-color: #dddddd;
}
.info{
  padding-left: 20px;
}
button{
	position: fixed;
	top: 0;
}
.hide{
	display: none;
}
<div id="test"></div>
<button id="bton">click me</button>

【讨论】:

  • 很好,你应该给自己一个答案检查:D你解决它〜!〜!只是我自己的喜好,我会这样做,但你的没有错。 jsfiddle.net/0m4egLupmyFunc() 使用三元运算符,对 btn 变量使用 const 而不是 let
  • 我的代码中肯定会有很好的变化 :D 我刚刚从你的代码中得到了这个想法,所以在这里你去非常感谢你
猜你喜欢
  • 2012-08-14
  • 2018-09-03
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 2012-09-27
  • 2019-08-06
  • 1970-01-01
  • 2020-10-09
相关资源
最近更新 更多