Flask 项目,在前端页面通过 Jinja2 模板的循环语句从列表中获取 object,并根据 object 的信息添加 div
{% for item in posts %}
<button type="button" class="btn btn-default" id="more_bt">
</button>
<div id="content" class="content">
{{item.content|safe}}
</div>
{% endfor %}
现在的问题是希望在 div 中的<button>
中绑定以下的 js 脚本,但是由于使用getElementById
所以 js 只能获取第一个 id="more_bt"的<button>
元素
<script>
var btn = document.getElementById('more_bt');
var btn_less = document.getElementById('less_bt');
var obj = document.getElementById('content');
var total_height = obj.scrollHeight;//文章总高度
var show_height = 20;//定义原始显示高度
if(total_height>show_height){
btn.style.display = 'block';
btn.onclick = function(){
obj.style.height = total_height + 'px';
btn.style.display = 'none';
btn_less.style.display = 'inline';
}
btn_less.onclick = function(){
obj.style.height = show_height + 'px';
btn_less.style.display = 'none';
btn.style.display = 'inline';
}
}
</script>
求解该如何将 js 脚本应用到循环添加的每个部件上
1
optional 2020-02-06 20:09:06 +08:00
理论上 id 是唯一的。
你这个把 id 改成 class,然后在父元素上委托一下就好, |
2
ysc3839 2020-02-06 20:13:37 +08:00 via Android
id 应该是唯一的,你这种情况应该使用 class。
|
3
imn1 2020-02-06 20:20:36 +08:00
id 有相同的?
|
4
rekulas 2020-02-06 21:03:30 +08:00
已经 0202 年了,querySelectorAll 了解下
|
5
zhw2590582 2020-02-06 21:03:35 +08:00
id 相同其实没问题,浏览器照样解析,只是不合规范。
|
6
beastk 2020-02-06 21:12:32 +08:00 via iPhone
不改 class 的话,做个循环,功能绑定后改掉 id。
|
7
beastk 2020-02-06 21:13:54 +08:00 via iPhone
勘误,先绑定功能,浏览器会找到第一个 id,改掉,继续循环
|
8
randyo 2020-02-06 21:18:12 +08:00 via Android
id 重复不符合规范,你永远不知道哪个浏览器下就出 bug
|
9
Aeoluze OP |
10
randyo 2020-02-06 21:35:07 +08:00 via Android
看你代码,紧跟按钮的那个元素就是指定的 content
|
11
beastk 2020-02-06 22:58:58 +08:00 via iPhone
$(.classname)
|
12
oatw 2020-02-06 23:20:44 +08:00 via iPhone
好奇为啥没人提一下 event delegation
|
13
ysc3839 2020-02-07 03:46:39 +08:00 via Android
@Aeoluze this.nextElementSibling 就能获取到下一个同级的元素了。
另外,“点击展开省略文本”可以用 css max-height 之类实现吧?也不需要比较高度呀。 |
14
mostkia 2020-09-26 18:40:04 +08:00
按钮数量如果多的话,事件委托才是正道
|