Cách lấy phần tử jQuery thứ n


311

Trong jQuery, $("...").get(3)trả về phần tử DOM thứ 3. Hàm trả về phần tử jQuery thứ 3 là gì?

Câu trả lời:


310

Tại sao không duyệt trang chọn (ngắn) trước?

Đây là: :eq()toán tử. Nó được sử dụng giống như get(), nhưng nó trả về đối tượng jQuery.

Hoặc bạn có thể sử dụng .eq()chức năng quá.


23
Đó không phải là .eq()thay vì :eq()?
RubenGeert

15
Có, .eq()phù hợp hơn cho câu hỏi của OP. :eq()được sử dụng trong tham số chuỗi $, trong khi đó .eq()là một phương thức trên một đối tượng jQuery hiện có.
mjswensen

55
Tôi thề tôi phải đi và tìm kiếm điều này mỗi . độc thân . thời gian .
ivarni

3
@JoelWorsham Phụ thuộc vào hành vi mong muốn. $('select').find('option').eq(n)về cơ bản sẽ bỏ qua việc nhóm, và có được tất cả các tùy chọn nói chung. Nếu bạn muốn nó cho mỗi nhóm, một cái gì đó như thế này là cần thiết:$('select').find('optgroup').each(function() { $(this).find('option').eq(n)...; })
Dykam

4
"Tại sao không duyệt trang chọn (ngắn) trước?" - Bởi vì "eq" là một cái tên rất tệ và tôi thường xuyên bỏ qua nó vì eq đối với tôi có nghĩa là so sánh ....
mmlac

309

Bạn có thể sử dụng : eq selector, ví dụ:

$("td:eq(2)").css("color", "red"); // gets the third td element

Hoặc hàm eq (int) :

$("td").eq(2).css("color", "red");

Ngoài ra, hãy nhớ rằng các chỉ mục là không dựa trên.


7
Là một từ đồng nghĩa, bạn cũng có thể sử dụng :nth()bộ chọn - không bị nhầm lẫn với:nth-child()
user123444555621

Câu trả lời tốt hơn và không được chỉnh sửa 3 năm sau khi thực tế :)
Andrew

cảm ơn bạn đã thực sự giải thích cách sử dụng bộ chọn / chức năng
Joseph Rogers

49

nếu bạn có quyền kiểm soát truy vấn xây dựng đối tượng jQuery, hãy sử dụng :eq()

$("div:eq(2)")

Nếu bạn không có quyền kiểm soát nó (ví dụ: nó được truyền từ chức năng khác hoặc thứ gì đó), thì hãy sử dụng .eq()

var $thirdElement = $jqObj.eq(2);

Hoặc nếu bạn muốn một phần của chúng (giả sử, các yếu tố thứ ba, thứ tư và thứ năm), hãy sử dụng .slice()

var $third4th5thElements = $jqObj.slice(2, 5);

Đã tìm kiếm lát, nhưng không chắc chắn làm thế nào để tìm kiếm. Cảm ơn vì đã vượt ra ngoài những gì được yêu cầu trong câu hỏi ban đầu.
Samik R

4
Đối với những người vấp phải câu trả lời này, một điểm hữu ích cần lưu ý là bộ chọn con thứ n dựa trên 1 trong khi: eq hoặc .eq () dựa trên 0
Sudhanshu Mishra

1
Bạn nên sử dụng .eq()thay vì :eq()thực sự. Tăng hiệu suất nhẹ.
Qwerty

13

Tôi nghĩ bạn có thể sử dụng cái này

$("ul li:nth-child(2)").append("<span> - 2nd!</span>");

Nó tìm thấy li thứ hai trong mỗi ul phù hợp và ghi chú nó.


11

.eq () -Một số nguyên chỉ vị trí dựa trên 0 của phần tử.

Ví dụ:

Hãy xem xét một trang với một danh sách đơn giản trên đó:

<ul>
<li>list item 1</li>
<li>list item 2</li>
<li>list item 3</li>
<li>list item 4</li>
</ul>

Chúng ta có thể áp dụng phương pháp này cho tập hợp các mục danh sách:

$( "li" ).eq( 2 ).css( "background-color", "red" );

Để biết thêm thông tin: .eq ()


3

Nếu bạn đã có đối tượng jquery trong một biến, bạn cũng có thể coi nó như một mảng được lập chỉ mục bình thường mà không cần sử dụng jquery:

var all_rows = $("tr");
for(var i=0; i < all_rows.length; i++){
   var row = all_rows[i];
   //additionally, you can use it again in a jquery selector
   $(row).css("background-color","black");
}

Mặc dù ví dụ trên không hữu ích theo bất kỳ cách nào, nhưng nó đại diện cho cách bạn có thể coi các đối tượng được tạo bởi jquery như các mảng được lập chỉ mục.


Đúng và một gợi ý nữa (hy vọng hữu ích): Nếu hàng chứa danh sách các <select>thành phần và bạn muốn phần tử combobox được chọn, hãy sử dụng$(row).val();
Matt

2

Nếu tôi hiểu chính xác câu hỏi của bạn, bạn luôn có thể chỉ cần bọc hàm get như vậy:

var $someJqueryEl = $($('.myJqueryEls').get(3));

3
Đây chỉ là "cách khó" và đây là những gì eq()mang lại cho bạn miễn phí.
Caumons

1

Nếu bạn muốn tìm nạp phần tử / nút hoặc thẻ cụ thể trong vòng lặp, ví dụ:

<p class="weekday" data-today="monday">Monday</p>
<p class="weekday" data-today="tuesday">Tuesday</p>
<p class="weekday" data-today="wednesday">Wednesday</p>
<p class="weekday" data-today="thursday">Thursday</p>

Vì vậy, từ vòng lặp mã ở trên được thực thi và chúng tôi muốn chọn trường cụ thể mà chúng tôi phải sử dụng lựa chọn jQuery có thể chỉ chọn phần tử mong đợi từ vòng lặp trên, vì vậy, mã sẽ được

$('.weekdays:eq(n)');

ví dụ

$('.weekdays:eq(0)');

cũng như bằng phương pháp khác

$('.weekday').find('p').first('.weekdays').next()/last()/prev();

nhưng phương thức đầu tiên hiệu quả hơn khi HTML <tag>có tên lớp duy nhất.

LƯU Ý: Phương thức thứ hai được sử dụng khi chúng không có tên lớp trong phần tử đích hoặc nút.

để biết thêm theo dõi https://api.jquery.com/eq/


0

Đối với các lần lặp sử dụng bộ chọn dường như không có ý nghĩa gì cả:

var some = $( '...' );

for( i = some.length -1; i>=0; --i )
{
   // Have to transform in a jquery object again:
   //
   var item = $( some[ i ] );

   // use item at will
   // ...
}

0

Ví dụ trực tiếp để truy cập và xóa phần tử Nth bằng jQuery:

<html>
<head></head>
<body>
    <script type="text/javascript" 
    src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
        $('li:eq(1)').hide();
      });
    </script>
    <ol>
      <li>First</li>
      <li>Second</li>
      <li>Third</li>
    </ol>
</body>
</html>

Khi nó chạy, có hai mục trong danh sách được sắp xếp hiển thị, Thứ nhất và Thứ ba. Thứ hai đã bị ẩn.


PS: Đếm bắt đầu từ 0; Đầu tiên là ở chỉ số 0, Thứ hai là ở chỉ số 1 và cứ thế ....
KNU

0
 $(function(){
            $(document).find('div').siblings().each(function(){
                var obj = $(this);
                obj.find('div').each(function(){
                    var obj1 = $(this);
                    if(!obj1.children().length > 0){
                        alert(obj1.html());
                    }
                });

            });
        });

<div id="2">
    <div>
        <div>
            <div>XYZ Pvt. Ltd.</div>
        </div>
    </div>
</div>
<div id="3">
    <div>
        <div>
            <div>ABC Pvt Ltd.</div>
        </div>
    </div>
</div>

"$ (function () {" đầu tiên của mùa thu, tôi đã tạo ra hàm ẩn danh, tự động kích hoạt. Bên trong đó, tôi tìm thấy ba div cha bằng cách sử dụng anh chị em. Sau đó, tôi đã lặp lại trong cả 3 div cha và kiểm tra độ dài của mỗi chiều dài con. Làm thế nào tôi có thể xác định rằng có phải là div cuối cùng hay không trong div cha. Bây giờ tôi đang cảnh báo div html cuối cùng của mỗi 3 div chính.
Sanjay Verma

Bạn có thể chỉnh sửa câu trả lời của mình, thay vì đưa ra thông tin trong các bình luận :)
T3 H40
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.