【问题标题】:What does -1 index of an element mean?元素的-1索引是什么意思?
【发布时间】:2015-05-28 08:27:29
【问题描述】:

我正在尝试调试下面的 jquery/js 代码。所以我一直在寻找元素的索引。但是它正在返回-1

jsFiddle 中运行良好。但是当迁移到 asp.net IDE 时,这是给-1

标记:

<div class="cart">
   <h2>Cart 1</h2>
   <p>Books </p> 
     <table class="cartcontent" data-options="fitColumns:true, singleSelect: true">                                
         <thead>
           <tr>
               <th data-options="field:'name',width:100">Name</th>
               <th data-options="field:'quantity',width:100">Quantity</th>
               <th data-options="field:'balance',width:100,align:'right'">Balance</th>
               <th data-options="field:'remove',width:100,align:'right'">Remove</th>
            </tr>
         </thead>
      </table>
</div>

jquery/js:

function loadData(cartIndex, event) {        
    alert($('.cart').index());
    var $cart = $('.cart:eq(' + cartIndex + ')');   
    alert($cart.index()); //returns -1
    $cart.find('.cartcontent').datagrid('loadData', data[cartIndex]);    

}

为什么在这里返回-1 索引,-1 是什么意思?

【问题讨论】:

  • api.jquery.com/index If the element is not found, .index() will return -1.loadData()被调用时,你确定在DOM中存在.cart元素吗?
  • 表示没有找到。你确定$('.cart:eq(' + cartIndex + ')') 存在吗?
  • 为什么这个问题被否决了?
  • @JoshStevenson 这表明缺乏研究工作。就像去相关方法的文档一样。毕竟,否决按钮就是这么说的
  • 如果您甚至无法重现它,就无法判断实际问题可能是什么。

标签: javascript jquery html


【解决方案1】:

-1 表示在数组中找不到对象。

$cart.index() 返回-1,因此无法找到$cart 中的任何内容。上面一行,您将$('.cart:eq(' + cartIndex + ')') 分配给$cart。因此,选择器 .cart:eq(' + cartIndex + ')' 不匹配您的 html 中的任何元素。

【讨论】:

    【解决方案2】:

    表示jQuery对象$cart不包含任何元素

    .index()

    如果没有找到该元素,.index() 将返回 -1。

    【讨论】:

    • 不知道为什么这被否决了。当然,它有点简洁,可以解释正在发生的事情,但它没有错。
    【解决方案3】:

    感谢大家帮助我提出所有我无法想到的想法。

    代码未按预期工作的主要原因之一是在加载 DOM 之前调用了 jquery/js 脚本函数。这就是@Rory McCrossan 首先评论的内容。我经过搜索并登陆this article: Running Your Code at the Right Time

    @AmmarCSE 在我最早的帖子中实际上问过我“所以你的意思是你有一个附加到 .cart 的点击处理程序,并且你想在里面加载表格?”

    我不知道在 jquery/javascript 和整个网络事物的上下文中是什么。然而,这帮助我理解了我可能需要eventlistener 并进一步思考为什么我必须使用按钮点击事件以及 pageload/domload 如何不适合这种情况。

    @Arun P Johny 陈述了许多在运行代码时找出元素是否存在的方法。

    我把js代码执行放在这里:

    </body>
    
        <script>
            document.addEventListener("DOMContentLoaded", theDomHasLoaded, false);
            alert("haha DOM content is loaded");
            function theDomHasLoaded(e) {
                addAll(0, e);
            }
        </script>     
        <script type="text/javascript" src="cart_Test.js"> </script>
    
    </html>
    

    来自C#背景,使用相当舒适的VS IDE和出色的调试功能,我意识到调试jQuery,js代码相当乏味。

    因为这是一个将迁移框架从 jsfiddle 放置到 asp.net 的测试,所以我尝试了 pageload、domload 事件。但是在实际实现中,我想在按钮单击事件上加载这些购物车 html 表。到那时,整个 DOM 无论如何都会被加载。我今天在这里学到了很多东西,谢谢大家。

    【讨论】:

      猜你喜欢
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多