为什么gt()和lt()只是jQuery选择器,而eq()也是一个方法?

Jur*_*uri 3 jquery

在jQuery中,为什么只有eq()这两个是一个选择器(:)和方法(.),而不是gt()lt()只选择("对象不支持该属性或方法")?

是否存在jQuery语法的这种不一致/差距的特殊原因,我不明白?

$("#eq").click(function(){
  alert($("li").eq(0).text());
  $("li").eq(1).css("background-color", "yellow");
});
$("#eq2").click(function(){
  alert($("li:eq(0)").text());
  $("li:eq(1)").css("background-color", "yellow");
});
$("#gt").click(function(){
  $("li").gt(1).css("background-color", "yellow");
});
$("#gt2").click(function(){
  $("li:gt(1)").css("background-color", "yellow");
});
$("#lt").click(function(){
  $("li").lt(1).css("background-color", "yellow");
});
$("#lt2").click(function(){
  $("li:lt(1)").css("background-color", "yellow");
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="indice">
 <li>Primo capitolo</li>
 <li>Secondo capitolo
  <ul>
   <li>Sottocapitolo</li>
  </ul>
 </li>
 <li>Terzo capitolo</li>
</ul>
<button id="eq">.eq()</button>
<button id="eq2">:eq()</button><br>
<button id="gt">.gt()</button> <!-- NO -->
<button id="gt2">:gt()</button><br>
<button id="lt">.lt()</button> <!-- NO -->
<button id="lt2">:lt()</button>
Run Code Online (Sandbox Code Playgroud)

Nie*_*sol 8

我想,它不被认为是内置的有用.使用.eq()而不是:eq允许jQuery querySelectorAll用于大规模的性能改进.

在任何情况下,您都可以这样使用.slice:

$("li").slice(0,4); // :lt(4)
$("li").slice(5); // :gt(4)
Run Code Online (Sandbox Code Playgroud)

或者,自己添加:

$.fn.lt = function(n) {return this.slice(0,n);};
$.fn.gt = function(n) {return this.slice(n+1);};
Run Code Online (Sandbox Code Playgroud)

例:

$.fn.lt = function(n) {return this.slice(0,n);};
$.fn.gt = function(n) {return this.slice(n+1);};
$("div").lt(2).css("color", "blue");
$("div").gt(2).css("border", "1px solid red");
$("div").eq(2).css("background-color", "yellow");
Run Code Online (Sandbox Code Playgroud)
<div>0</div>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)