jQuery显示/隐藏仅适用于第一个选择器
jQuery show/hide only works on first selector
我正在尝试为我的表创建一个显示-隐藏函数。问题是jQuery似乎只适用于第一个选择器,而不适用于其他选择器。
有人能帮我解决这个问题吗?
jQuery:
jQuery("document").ready(function($) {
$("#paragraph-div").hide();
$("#toggle-div").click(function() {
if ($("#paragraph-div").is(":visible")) {
$("#paragraph-div").hide();
$("#toggle-div").val("Less Info");
} else {
$("#paragraph-div").show();
}
});
});
HTML:
<table>
<tr>
<td>data</td>
</tr>
<tr>
<td>
<a id="toggle-div">More Info</a>
<div id="paragraph-div">
<p>Hidden text - Toggle more info to show.</p>
</div>
</td>
</tr>
<tr>
<td>data</td>
</tr>
<tr>
<td>
<a id="toggle-div">More Info</a>
<div id="paragraph-div">
<p>Hidden text - Toggle more info to show.</p>
</div>
</td>
</tr>
<tr>
<td>data</td>
</tr>
<tr>
<td>
<a id="toggle-div">More Info</a>
<div id="paragraph-div">
<p>Hidden text - Toggle more info to show.</p>
</div>
</td>
</tr>
</table>
工作小提琴
id
在同一文档中应该是唯一的,用普通类替换重复的一次,例如:
<a class="toggle-div">
<div class="paragraph-div">
代替:
<a id="toggle-div">
<div id="paragraph-div">
然后在js中使用类选择器.
,而不是id选择器:
$(".toggle-div")
$(".paragraph-div")
代替:
$("#toggle-div")
$("#paragraph-div")
注意:
- 您可以在事件中使用
$(this)
而不是".toggle-div"
- 您应该使用
$(this).next(".paragraph-div")
来选择与单击的链接相关的段落 div
标记没有val()
方法,应该使用text()
希望这能有所帮助。
代码段
jQuery("document").ready(function($) {
$(".paragraph-div").hide();
$(".toggle-div").click(function()
{
if ($(this).next(".paragraph-div").is(":visible")) {
$(this).next(".paragraph-div").hide();
$(this).text("More Info");
} else {
$(this).next(".paragraph-div").show();
$(this).text("Less Info");
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr>
<td>data</td>
</tr>
<tr>
<td><a class="toggle-div">More Info</a><div class="paragraph-div"><p>Hidden text - Toggle more info to show.</p></div></td>
</tr>
<tr>
<td>data</td>
</tr>
<tr>
<td><a class="toggle-div">More Info</a><div class="paragraph-div"><p>Hidden text - Toggle more info to show.</p></div></td>
</tr>
<tr>
<td>data</td>
</tr>
<tr>
<td><a class="toggle-div">More Info</a><div class="paragraph-div"><p>Hidden text - Toggle more info to show.</p></div></td>
</tr>
</table>
我想你正在寻找这样的东西:
jQuery("document").ready(function($) {
$(".paragraph-div").hide();
$(".toggle-div").click(function() {
var $this = $(this);
var $paragraph = $this.next('.paragraph-div');
if ($paragraph.is(":visible")) {
$paragraph.hide();
$this.html("More Info");
} else {
$paragraph.show();
$this.html("Less Info");
}
});
});
<script src="https://code.jquery.com/jquery-1.12.2.min.js"></script>
<table>
<tr>
<td>data</td>
</tr>
<tr>
<td>
<a class="toggle-div">More Info</a>
<div class="paragraph-div">
<p>Hidden text - Toggle more info to show.</p>
</div>
</td>
</tr>
<tr>
<td>data</td>
</tr>
<tr>
<td>
<a class="toggle-div">More Info</a>
<div class="paragraph-div">
<p>Hidden text - Toggle more info to show.</p>
</div>
</td>
</tr>
<tr>
<td>data</td>
</tr>
<tr>
<td>
<a class="toggle-div">More Info</a>
<div class="paragraph-div">
<p>Hidden text - Toggle more info to show.</p>
</div>
</td>
</tr>
</table>
(另请参见此Fiddle)
相关文章:
- 缩放仅适用于一个图元
- 在循环中添加addEventListener()只适用于最后一个按钮
- 我怎么能有一个自动渐变背景使用JavaScript,它适用于最新版本的Internet Explorer
- 仅将 CSS 规则应用于
中的第一个 ,而不分配类/ID - 插件总是只得到最后一个实例,如何让它适用于多个元素
- 为什么mouseover只适用于第一行
- 使jQuery自动完成功能适用于多个单词(“跳过”一个单词)
- onclick适用于一个按钮,但不适用于'不要为别人工作
- 我想放一个JS函数,它适用于列表的所有元素,但我可以't将其复制到每个元素中
- JavaScript-getElementsByClassName适用于一个函数,但不适用于另一个函数
- 绑定函数仅适用于最后一个元素
- 为什么警报仅适用于第一行
- 动态按钮点击事件仅适用于最后一个按钮
- 函数仅适用于第一个td's、 但不是针对所有的td's
- 带有KendoUI图表的KnockoutJS组件只适用于最后一个图表
- Jquery.upvote.js只适用于第一行
- 如何调整空格键和回车只适用于第三个按钮,不适用于任何其他按钮
- 在具有多个id的目标页面上,脚本只作用于第一个id
- Jquery效果只作用于第一个id
- 节点.js如何使一个变量更改也适用于另一个变量更改