Jquery index() 找不到我的元素

Jquery index() doesn't find my element

本文关键字:我的 元素 找不到 index Jquery      更新时间:2023-09-26

今天我对jQuery .index()函数有一个小问题。我有一个拥有primaryContract类的div列表。其中div 也包含选定的类。我想接收此选定元素的索引。我尝试了很多操作,但没有任何效果,该函数仅返回 -1(这是该函数的失败返回值)。

以下是相关HTML的部分:

<div class="owl-carousel owl-loaded" rv-slide="context:stepHide" style="display: block;">
   <!-- rivets: each-contract -->
   <div class="owl-stage-outer">
      <div class="owl-stage" style="transition: 0s; width: 654px; transform: translate3d(218px, 0px, 0px);">
         <div class="owl-item active center" style="width: 109px;">
            <div class="primaryContract" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">243992</div>
         </div>
         <div class="owl-item active" style="width: 109px;">
            <div class="primaryContract selected" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">444444</div>
         </div>
         <div class="owl-item active" style="width: 109px;">
            <div class="primaryContract" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">665441</div>
         </div>
         <div class="owl-item" style="width: 109px;">
            <div class="primaryContract" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">243992</div>
         </div>
         <div class="owl-item" style="width: 109px;">
            <div class="primaryContract selected" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">444444</div>
         </div>
         <div class="owl-item" style="width: 109px;">
            <div class="primaryContract" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">665441</div>
         </div>
      </div>
   </div>
</div>

这是我关心的JS:

initializeSelectedCarouselItem:function(){
        var items = $("div.primaryContract");
        var index = items.index('.selected');
        console.log(index);

有人看到我在哪里犯了错误吗?

不起作用的原因

你试图传递一个类.selected,而index()期待一个对象或DOM元素。

如果在元素集合上调用 .index() 并传入 DOM 元素或 jQuery 对象,则 .index() 返回一个整数,指示传递的元素相对于原始集合的位置。 如果选择器字符串作为参数传递,.index() 返回一个整数,指示 jQuery 对象中第一个元素相对于选择器匹配的元素的位置。如果未找到该元素,.index() 将返回 -1。

所做的更改

var selector = $('.selected')
var index = items.index(selector);

工作演示

var items = $("div.primaryContract");
var selector = $('.selected')
var index = items.index(selector);
alert(index);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="owl-carousel owl-loaded" rv-slide="context:stepHide" style="display: block;">
  <!-- rivets: each-contract -->
  <div class="owl-stage-outer">
    <div class="owl-stage" style="transition: 0s; width: 654px; transform: translate3d(218px, 0px, 0px);">
      <div class="owl-item active center" style="width: 109px;">
        <div class="primaryContract" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">243992</div>
      </div>
      <div class="owl-item active" style="width: 109px;">
        <div class="primaryContract selected" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">444444</div>
      </div>
      <div class="owl-item active" style="width: 109px;">
        <div class="primaryContract" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">665441</div>
      </div>
      <div class="owl-item" style="width: 109px;">
        <div class="primaryContract" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">243992</div>
      </div>
      <div class="owl-item" style="width: 109px;">
        <div class="primaryContract selected" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">444444</div>
      </div>
      <div class="owl-item" style="width: 109px;">
        <div class="primaryContract" rv-text="contract:primaryContractReference" rv-value="contract:primaryContractReference" rv-addclass="context:primaryContract | eq contract:primaryContractReference | if 'selected'">665441</div>
      </div>
    </div>
  </div>
</div>

jQuery index()将仅从其父级返回子项的索引,而不从祖父级返回。因此,您已将其父级用作子项以使用祖父级作为父项

initializeSelectedCarouselItem:function(){
    var index = $(".primaryContract.selected").parent().index();
    console.log(index);
}

你应该得到父索引,因为primaryContract是父div的唯一子级
运行此代码

var index = $(".primaryContract.selected").parent().index();

var indexes=[];
$(".primaryContract.selected").each(function(){
    indexes.push($(this).parent(".owl-item").index());
});
alert(indexes);