jQuery:从具有一个类的多个实例的对象访问元素
jQuery: Accessing an element from an object with multiple instances of a class
我正在尝试做一个简单的选项卡导航。
我想我可以把所有按钮都放在一个对象中,对内容div做同样的事情,获取点击按钮的索引,并使用该索引号访问内容div,以显示相应的内容。我做错了什么?
HTML:
<div class="row">
<a class="btn" href="#">One</a>
<a class="btn" href="#">Two</a>
<a class="btn" href="#">Three</a>
<a class="btn" href="#">Four</a>
</div>
<div class="row">
<div class="content">Content 1</div>
<div class="content">Content 2</div>
<div class="content">Content 3</div>
<div class="content">Content 4</div>
</div>
jQuery:
$(document).ready(function(){
var $btn = $('.btn');
var $content = $('.content');
$btn.each(function(){
$(this).on('click', function(){
$content.hide();
var i = $btn.index(this);
$content[i].show(); //This does not work
});
});
});
jsFiddle:http://jsfiddle.net/pcr0zuuo/
提前感谢!
您的问题是show()是一个jQuery函数。然而,对jQuery对象执行offset[i]操作将返回原始dom元素。您应该使用eq(index)来获取jQuery对象以对其进行操作。
本质上,问题是您尝试在普通DOM节点上使用jQuery函数。你可以用两种方法来修复它:
$( $content[i] ).show()
或
$content.eq(i).show()
两者都应该正确地包装元素,并按照您的期望显示它。(http://jsfiddle.net/pcr0zuuo/1/)
您的逻辑是正确的。您可以针对类.btn
的索引并显示相应的div。
如果要使用jquery,请使用index()
函数查找索引,使用eq
函数查找索引。
$('.btn').click(function()
{
$('.content').eq($(this).index()).show();
});
http://jsfiddle.net/eqntjb01/
或者,您可以通过javascript(您在示例中尝试的方式)来实现它
$('.btn').click(function()
{
$('.content')[$(this).index()].style.display = "block";
});
http://jsfiddle.net/eqntjb01/1/
$content.eq(i).show();
它在你的jsFiddle中起作用。(感谢Taplar的提示)
相关文章:
- 使用jQuery获取Dropzone实例/对象
- 在requirejs中共享实例化对象
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- 代码挑战:创建一个跟踪对象实例总数的类Foo
- JavaScript:如果现有对象被实例化为具有特定值,如何创建警报
- 用javascript创建另一个对象的实例
- Backbone relational无法实例化两个RelationalModel对象
- 创建一个类,该类使用es6类语法将Function对象创建为实例
- 为什么属性存在于对象实例上,即使其原型发生了更改
- 如何在angularJS中获得对指令对象实例的引用
- 无法将值从实例对象传输到父类的实例数组中
- Javascript 原型 - 不仅适用于实例对象
- 如何在 angular 的控制器中使用用户定义的类实例/对象
- 三.js不是三的实例.对象3D
- 实例对象的私有状态的以下实现存在缺陷
- ES6 setter -保持对象干净//映射实例对象上的参数
- 直接从空格键访问模板实例对象属性
- 理解AngularJS $resource()返回什么(类或实例对象)
- 在Chrome原生消息传递:有多长是本地应用实例对象的生命周期
- 集合/实例对象样式为没有proto的vie javascript