如何定位具有相同ID的div

时间:2016-02-23 15:33:45

标签: javascript jquery

我目前有一些构建输出的ASP.Net代码,然后通过字符串文字显示它。我们的想法是,对于每个Receipt,都会有一个“查看更多”按钮,用于切换display: none;开头的额外信息。我尝试使用eq()方法尝试找到我要切换的那个,因为我在ul内执行此操作。我目前的代码是:

$("#btn-expand").click(function () {
    var ldx = $("#list li .active").index(); // Get the list number so we know what ID to work with
    var idx = $("#expand").next().index(); // Get the next ID index point

    // Check that it isn't going negative
    if (idx == -1 || ldx == -1) {
        // If it is, reset ldx
        ldx = 0;
        idx = 0;
    }

    $("#expand").eq(ldx).toggle(); // Toggle that one
    console.log(ldx);
});

第一个按钮工作正常,console.log显示0但是,所有其他按钮都没有显示任何内容。我的HTML示例如下所示:

<ul id="list">
    <li class="active">
        Something <br />
        Something Again <br />
        <span id="btn-expand">[View more]</span>
        <div id="expand">
            Something hidden
        </div>
     </li>
     This <br />
     Shows <br />
     <span id="btn-expand">[View more]</span>
     <div id="expand">
         This is hidden until toggled
     </div>
     <li></li>
</ul>

li中有更多ul个元素,但这就是它的结构。我也在使用<span class="btn" id="btn-next">Next</span>遍历li中的每个ul,所以我真的很困惑为什么使用`#expand'执行此操作的方法不起作用。

如果有人能指出我正确的方向,我将不胜感激。感谢。

$(document).ready(function() {

  $("#btn-next").click(function() {
    var $list = $("#list li");
    var idx = $(".active").removeClass("active").next().index();
    if (idx == -1) {
      idx = 0;
    }
    $list.eq(idx).addClass("active");
  });

  $("#btn-prev").click(function() {
    var $list = $("#list li");
    var idx = $(".active").removeClass("active").prev().index();
    if (idx == -1) {
      idx = 0;
    }
    $list.eq(idx).addClass("active");
  });

  $("#btn-expand").click(function() {
    // Get the list number so we know what ID to work with
    var ldx = $("#list li .active").index();
    // Get the next ID index point
    var idx = $("#expand").next().index();
    // Check that it isn't going negative
    if (idx == -1 || ldx == -1) {
      // If it is, reset ldx
      ldx = 0;
      idx = 0;
    }
    // Toggle that one
    $("#expand").eq(ldx).toggle();
    console.log(ldx);
  });
});
#list {
  list-style: none;
}
.active {
  display: block;
}
#btn-expand {
  cursor: pointer;
  font-size: 9px;
  margin-left: 10px;
}
#expand {
  display: none;
}
li {
  display: none;
}
.btn {
  background: none;
  padding: 10px;
  border: 1px solid #000;
  margin-left: 50px;
  cursor: pointer;
}
<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<ul id="list">
  <li class="active">
    Something here
    <br />Something here again
    <span id="btn-expand"> [View More] </span> 
    <br />
    <br />
    <span id="expand">
      This is hidden, shh..
    </span>
  </li>
  <li>
    You can see this
    <br />Toggling shouldn't effect me
    <span id="btn-expand"> [View More] </span> 
    <br />
    <br />
    <span id="expand">
      But toggling should effect me!
    </span>
  </li>
</ul>
<span class="btn" id="btn-prev">Prev</span> - <span class="btn" id="btn-next">Next</span>

3 个答案:

答案 0 :(得分:5)

id在同一个文档中应该是唯一的,用通用类替换重复的文件,r.g:

<ul id="list">
   <li class="active">
      Something <br />
      Something Again <br />
      <span class="btn-expand">[View more]</span>
      <div class="expand">
         Something hidden
      </div>
   </li>
      This <br />
      Shows <br />
      <span class="btn-expand">[View more]</span>
      <div class="expand">
         This is hidden until toggled
      </div>
   <li>
   </li>
</ul>

然后通过类选择器#替换脚本中的id选择器.

$(".btn-expand").click(function() {
    // Get the list number so we know what ID to work with
    var ldx = $("#list li .active").index();
    // Get the next ID index point
    var idx = $(".expand").next().index();
    // Check that it isn't going negative
    if (idx == -1 || ldx == -1) {
      // If it is, reset ldx
      ldx = 0;
      idx = 0;
    }
    // Toggle that one
    $(".expand").eq(ldx).toggle();
    console.log(ldx);
});

您只能使用next()代替事件中的所有代码:

$(this).next(".expand").toggle();
//OR
$(this).next().toggle();

希望这有帮助。

&#13;
&#13;
$(".btn-expand").click(function() {
     $(this).next(".expand").toggle();
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="list">
   <li class="active">
      Something <br />
      Something Again <br />
      <span class="btn-expand">[View more]</span>
      <div class="expand">
         Something hidden
      </div>
     
   </li>
   <li>
      This <br />
      Shows <br />
      <span class="btn-expand">[View more]</span>
      <div class="expand">
         This is hidden until toggled
      </div>
   </li>
</ul>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

将ID更改为类,然后您需要的是:

$(".btn-expand").click(function() {
   $(this).next().toggle();
   $(this).text(function(_, oldText){
       return oldText.indexOf('More') === -1 ? 'View More' :'View Less';
   })
});

答案 2 :(得分:1)

&#13;
&#13;
$(document).ready(function() {

  $("#btn-next").click(function() {
    var $list = $("#list li");
    var idx = $(".active").removeClass("active").next().index();
    if (idx == -1) {
      idx = 0;
    }
    $list.eq(idx).addClass("active");
  });

  $("#btn-prev").click(function() {
    var $list = $("#list li");
    var idx = $(".active").removeClass("active").prev().index();
    if (idx == -1) {
      idx = 0;
    }
    $list.eq(idx).addClass("active");
  });

  $(".btn-expand").click(function() {  
    // Toggle
    $(this).next().toggle();

  });
});
&#13;
#list {
  list-style: none;
}
.active {
  display: block;
}
#btn-expand {
  cursor: pointer;
  font-size: 9px;
  margin-left: 10px;
}

li {
  display: none;
}
.btn {
  background: none;
  padding: 10px;
  border: 1px solid #000;
  margin-left: 50px;
  cursor: pointer;
}

.expand-inner {
display:inline-block;
width:100%;
}
&#13;
<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<ul id="list">
  <li class="active">
    Something here
    <br />Something here again
    <span class="btn-expand"> [View More] </span>   
       <span style="display:none;">
      <div class="expand-inner">This is hidden, shh..</div>
      
    </span>
  </li>
  <li>
    You can see this
    <br />Toggling shouldn't effect me
    <span class="btn-expand"> [View More] </span>    
    <span style="display:none;">
        
      <div class="expand-inner">But toggling should effect me!</div>
    </span>
  </li>
</ul>
<span class="btn" id="btn-prev">Prev</span> - <span class="btn" id="btn-next">Next</span>
&#13;
&#13;
&#13;