2008-12-07 36 views
244

Tôi cần thay đổi ID của phần tử bằng jQuery.Thay đổi ID của một phần tử bằng jQuery

Rõ ràng những không làm việc:

jQuery(this).prev("li").attr("id")="newid" 
jQuery(this).prev("li")="newid" 

tôi phát hiện ra rằng tôi có thể làm cho nó xảy ra với đoạn mã sau:

jQuery(this).prev("li")show(function() { 
    this.id="newid"; 
}); 

Nhưng điều đó có vẻ không đúng với tôi. Phải có một cách tốt hơn, phải không? Ngoài ra, trong trường hợp không có, tôi có thể sử dụng phương pháp nào khác thay vì hiển thị/ẩn hoặc các hiệu ứng khác? Rõ ràng là tôi không muốn hiển thị/ẩn hoặc ảnh hưởng đến yếu tố mỗi lần, chỉ để thay đổi ID của nó.

(Đúng, tôi là một newbie jQuery.)

Sửa
tôi không thể sử dụng các lớp trong trường hợp này, tôi phải sử dụng ID.

+5

Trong JavaScript, bạn có thể gán cho một variable ('foo = 1'), một thành viên của một đối tượng (' foo.bar = 2' hoặc 'foo ['bar'] = 2') hoặc một chỉ số mảng (' foo [0] = 3'), nhưng gán cho một biểu thức, như kết quả của toán tử ('(x + b) = 5') hoặc kết quả của một hàm gọi ('foo() = 1',' foo (x) .bar (y) = 7') không có ý nghĩa gì, vì vậy nó chắc chắn sẽ không phải là cách mọi thứ hoạt động trong jQuery hay bất kỳ thứ gì khác Thư viện JavaScript. – rakslice

Trả lời

441

cú pháp của bạn là không chính xác, bạn nên vượt qua giá trị như tham số thứ hai:

jQuery(this).prev("li").attr("id","newId"); 
+2

Tôi nghĩ rằng newId phải ở trong dấu ngoặc kép –

+5

Bạn không cần phải tách phần tử khỏi DOM và thay thế nó bằng một phần tử mới có ID mới ở vị trí của nó? Để tránh phá vỡ DOM ...? – roosteronacid

+14

jQuery sẽ quan tâm đến điều đó, roosteronacid. – McPherrinM

5

Tôi không chắc mục đích của bạn là gì, nhưng thay vào đó, tốt hơn nên sử dụng addClass? Tôi có nghĩa là một ID đối tượng trong quan điểm của tôi nên được tĩnh và cụ thể cho đối tượng đó. Nếu bạn chỉ cố gắng thay đổi nó hiển thị trên trang hoặc một cái gì đó như thế tôi sẽ đặt những chi tiết đó trong một lớp và sau đó thêm nó vào đối tượng thay vì sau đó cố gắng thay đổi ID của nó. Một lần nữa, tôi nói rằng không hiểu mục tiêu của bạn.

+0

Tôi phải sử dụng id như một cách để hack vào một hệ thống hiện có. không có cách nào xung quanh nó ... – yoavf

+2

những niềm vui của hệ thống di sản - Tôi hiểu nỗi đau của bạn sau đó. Eran trả lời chắc chắn là tốt nhất sau đó. –

+3

Trên thực tế, thiết lập id là một điều hữu ích và đáng giá để làm nếu bạn đang xây dựng DOM bằng cách sử dụng các mẫu ẩn trong HTML và sau đó nhân bản chúng bằng cách sử dụng jquery. –

39

gì bạn có nghĩa là phải làm là:

jQuery(this).prev("li").attr("id", "newID"); 

đó sẽ thiết lập ID để ID mới

8

Tôi đã làm điều gì đó tương tự với cấu trúc này

$('li').each(function(){ 
    if(this.id){ 
    this.id = this.id+"something"; 
    } 
}); 
0

Câu trả lời của Eran là tốt, nhưng tôi sẽ phụ thêm vào đó. Bạn cần phải xem bất kỳ tương tác nào không trực tiếp với đối tượng (tức là, nếu một sự kiện onclick gọi một hàm, nó vẫn sẽ), nhưng nếu có một số xử lý sự kiện javascript hoặc jQuery được đính kèm với ID đó, cơ bản nó sẽ bị bỏ rơi :

$("#myId").on("click", function() {}); 

Nếu ID giờ đây được đổi thành # myID123, chức năng được đính kèm ở trên sẽ không còn hoạt động chính xác nữa với trải nghiệm của tôi.

37

Một lựa chọn ưa thích hơn .attr là sử dụng .prop như vậy:

$(this).prev('li').prop('id', 'newId'); 

.attr lấy thuộc tính của phần tử trong khi .prop lấy tài sản mà tài liệu tham khảo thuộc tính (tức là những gì bạn đang thực có ý định sửa đổi)

+2

.attr đã không được chấp nhận - đây là cách thực hiện chính xác. – PointlessSpike

+3

Thông tin này đến từ đâu? http://api.jquery.com/attr/ không nói gì về việc không dùng nữa ... – Sergej

+0

Nó không được chấp nhận. "** Theo jQuery 1.6 **, phương thức' .prop() 'cung cấp một cách để truy lục một cách rõ ràng các giá trị thuộc tính, trong khi' .attr() 'truy lục các thuộc tính." – Illuminator

0
<script> 
     $(document).ready(function() { 
      $('select').attr("id", "newId"); //direct descendant of a 
     }); 
</script> 

Điều này có thể làm cho mọi mục đích. Chỉ cần thêm trước thẻ đóng của bạn và không cho thêm Jquery.min.js

2
$("#LeNomDeMaBaliseID").prop('id', 'LeNouveauNomDeMaBaliseID'); 
+1

Giải pháp này đã được cung cấp [ở đây] (http://stackoverflow.com/a/25493852/1974224) – Cristik

+0

Vui lòng không đăng câu trả lời chỉ có mã - luôn thêm giải thích cho mã của bạn trong câu trả lời. – DanFromGermany

3

nếu bạn muốn thay đổi id cũ sau đó hiện nay cho thấy trong ví dụ

<label id="myOldId">Change id....</label> 

và chage bằng cách sử dụng java script

<script type="text/javascript" src="jQuery-1.7.2.js"></script> 

<script> 
$(document).ready(function() { 

    $('#myOldId').attr('id', 'newID'); 

    }); 
</script> 
Các vấn đề liên quan