การเปลี่ยน ID ขององค์ประกอบด้วย jQuery


302

ฉันต้องเปลี่ยน ID ขององค์ประกอบโดยใช้ jQuery

เห็นได้ชัดว่าสิ่งเหล่านี้ไม่ทำงาน:

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

ฉันพบว่าฉันสามารถทำให้เกิดขึ้นกับรหัสต่อไปนี้:

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

แต่นั่นดูเหมือนจะไม่ถูกต้องสำหรับฉัน จะต้องมีวิธีที่ดีกว่าไม่ใช่เหรอ? นอกจากนี้ในกรณีที่ไม่มีวิธีการอื่นที่ฉันสามารถใช้แทน show / hide หรือเอฟเฟกต์อื่น ๆ ได้? เห็นได้ชัดว่าฉันไม่ต้องการแสดง / ซ่อนหรือส่งผลกระทบต่อองค์ประกอบทุกครั้งเพียงแค่เปลี่ยน ID

(ใช่ฉันเป็นมือใหม่ jQuery)

แก้ไข
ฉันไม่สามารถใช้คลาสได้ในกรณีนี้ฉันต้องใช้ ID


5
ใน JavaScript คุณสามารถกำหนดให้กับตัวแปร ( foo = 1) สมาชิกของวัตถุ ( foo.bar = 2หรือfoo['bar'] = 2) หรือตัวห้อยอาร์เรย์ ( foo[0] = 3) แต่กำหนดให้กับนิพจน์เช่นผลลัพธ์ของโอเปอเรเตอร์ ( (x + b) = 5) หรือผลลัพธ์ของการเรียกใช้ฟังก์ชัน ( foo() = 1, foo(x).bar(y) = 7) ไม่มีเหตุผลใด ๆ ดังนั้นจึงไม่น่าจะเป็นวิธีที่สิ่งต่าง ๆ ทำงานใน jQuery หรือไลบรารี JavaScript อื่น ๆ
rakslice

คำตอบ:


520

ไวยากรณ์ของคุณไม่ถูกต้องคุณควรส่งค่าเป็นพารามิเตอร์ตัวที่สอง:

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

4
ฉันคิดว่ารหัสใหม่ควรอยู่ในเครื่องหมายคำพูด
Jay Corbett

5
คุณไม่จำเป็นต้องแยกองค์ประกอบจาก DOM และแทนที่ด้วยองค์ประกอบใหม่ที่มี ID ใหม่ในสถานที่หรือไม่ เพื่อหลีกเลี่ยงการทำลาย DOM ... ?
cllpse

15
jQuery ดูแล roosteronacid
McPherrinM

15
มาถึงที่นี่การตรวจสอบการมอบหมาย ID ซ้ำอีกครั้ง - ตอนนี้ควรจะเป็น.prop( ... )แทนที่จะเป็น.attr( ... )หรือไม่
Carl

2
@Carl ตามเอกสารล่าสุด jQuery และตัวอย่างidจะยังคงได้รับการตั้งค่าการใช้attr(...)
JoeBrockhaus

71

ตัวเลือกที่พึง.attrประสงค์มากกว่าคือการใช้.propเช่น:

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

.attrดึงคุณสมบัติขององค์ประกอบในขณะที่.propดึงคุณสมบัติที่อ้างอิงคุณสมบัติ (เช่นสิ่งที่คุณตั้งใจจะแก้ไขจริง )


4
.attr เลิกใช้แล้ว - นี่เป็นวิธีที่ถูกต้องในการทำ
PointlessSpike

7
ข้อมูลนี้มาจากไหน api.jquery.com/attrพูดอะไรเกี่ยวกับการคัดค้าน ...
Sergej

มันไม่ได้เลิก " ในฐานะของ jQuery 1.6ที่.prop()วิธีการให้วิธีการอย่างชัดเจนเรียกค่าทรัพย์สินในขณะที่.attr()คุณลักษณะดึง."
ความกระจ่าง

@Illuminator ฉันแก้ไขคำตอบของฉันตาม ขอบคุณ
Jeremy Moritz


11

ฉันทำอะไรที่คล้ายกับโครงสร้างนี้

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

7

ฉันไม่แน่ใจว่าเป้าหมายของคุณคืออะไร แต่ควรใช้ addClass แทนหรือไม่ ฉันหมายถึง ID วัตถุในความเห็นของฉันควรเป็นแบบคงที่และเฉพาะเจาะจงกับวัตถุนั้น หากคุณเพียงแค่พยายามที่จะเปลี่ยนจากการแสดงบนหน้าหรือสิ่งที่ฉันจะใส่รายละเอียดเหล่านั้นในชั้นเรียนแล้วเพิ่มไปยังวัตถุแทนที่จะพยายามเปลี่ยนเป็น ID อีกครั้งฉันพูดว่าไม่เข้าใจเป้าหมายที่ขีดเส้นใต้ของคุณ


3
ความสุขของระบบเดิม - ฉันเข้าใจความเจ็บปวดของคุณแล้ว คำตอบ Eran แน่นอนที่สุดแล้ว
Tim Knight

5
การตั้งค่า ID จริง ๆ แล้วมีประโยชน์และคุ้มค่าหากคุณกำลังสร้าง DOM โดยใช้เทมเพลตที่ซ่อนอยู่ใน HTML แล้วทำการโคลนโดยใช้ jquery
Steve Knight

5
$("#LeNomDeMaBaliseID").prop('id', 'LeNouveauNomDeMaBaliseID');

1
วิธีการแก้ปัญหานี้มีให้ที่นี่
Cristik

1
โปรดอย่าโพสต์คำตอบรหัสเท่านั้น - เพิ่มคำอธิบายในรหัสของคุณเสมอในคำตอบ
Daniel W.

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

สิ่งนี้สามารถทำได้เพื่อจุดประสงค์ทั้งหมด เพียงเพิ่มก่อนแท็กปิดเนื้อหาของคุณและอย่าไปเพิ่มJquery.min.js


0

คำตอบของอีแรนนั้นดี แต่ฉันจะต่อท้ายมัน คุณต้องดูการโต้ตอบใด ๆ ที่ไม่ได้อยู่ในวัตถุ (นั่นคือถ้าเหตุการณ์ onclick เรียกฟังก์ชันมันจะยังคงอยู่) แต่ถ้ามี javascript หรือ jQuery จัดการกับเหตุการณ์นั้นแนบมากับ ID นั้นโดยทั่วไปแล้วมันจะถูกทิ้ง :

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

หากตอนนี้เปลี่ยน ID เป็น # myID123 แล้วฟังก์ชั่นที่แนบมาด้านบนจะไม่ทำงานอย่างถูกต้องจากประสบการณ์ของฉันอีกต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.