การตั้งค่าคุณลักษณะ href ที่รันไทม์


202

วิธีที่ดีที่สุดในการตั้งค่าhrefแอตทริบิวต์ของ<a>แท็ก ณ รันไทม์โดยใช้ jQuery คืออะไร

นอกจากนี้คุณจะรับค่าhrefคุณลักษณะของ<a>แท็กโดยใช้ jQuery ได้อย่างไร

คำตอบ:


378

ในการรับหรือตั้งค่าคุณสมบัติขององค์ประกอบ HTML คุณสามารถใช้element.attr()ฟังก์ชั่นใน jQuery

เพื่อรับแอตทริบิวต์hrefใช้รหัสต่อไปนี้:

var a_href = $('selector').attr('href');

ในการตั้งค่าแอตทริบิวต์hrefให้ใช้รหัสต่อไปนี้:

$('selector').attr('href','http://example.com');

ในทั้งสองกรณีโปรดใช้ตัวเลือกที่เหมาะสม หากคุณตั้งระดับสำหรับองค์ประกอบสมอใช้และถ้าคุณได้ตั้งรหัสสำหรับองค์ประกอบสมอใช้'.class-name''#element-id'


1
ฉันใช้สิ่งนี้เพื่อรับ href การแจ้งเตือน ($ ( "# เผยแพร่เชื่อมโยง") attr ( "href").); และทำให้ฉันตื่นตัวว่า "ไม่ได้กำหนด"
gautamlakum

3
อาจหมายถึงว่าลิงค์การประกาศของคุณเป็นคลาสแทนที่จะเป็น id ลอง: การแจ้งเตือน ($ (". publish-link"). attr ("href")); แทน
jim tollan

3
@ lakum4stackof: มันจะช่วยถ้าคุณโพสต์แท็ก

ขอโทษด้วย คุณพูดถูก ฉันสมัครคลาสแล้วและฉันใช้ '#' ในรหัส jquery ใช้งานได้กับการแจ้งเตือน ($ (". publish-link"). attr ("href")); ขอบคุณมาก. :)
gautamlakum

18

ใน jQuery 1.6+ ควรใช้:

$(selector).prop('href',"http://www...")เพื่อตั้งค่าและ

$(selector).prop('href')เพื่อรับค่า

ในระยะสั้น.propที่ได้รับและค่าชุดบนDOMวัตถุและ.attrได้รับและชุดค่าในHTML ทำให้.propเร็วขึ้นเล็กน้อยและอาจเชื่อถือได้มากขึ้นในบางบริบท


1
ตกลง '.prop' จะได้รับเส้นทางแบบเต็มเช่น: http: //www.../index.html ในขณะที่. attr จะได้รับเฉพาะ: 'index.html'
DevWL

14

ตั้งค่าhrefคุณสมบัติด้วย

$(selector).attr('href', 'url_goes_here');

และอ่านโดยใช้

$(selector).attr('href');

โดยที่ "selector" เป็นตัวเลือก jQuery ที่ถูกต้องสำหรับ<a>องค์ประกอบของคุณ(".myClass" หรือ "#myId" เพื่อตั้งชื่อสิ่งที่ง่ายที่สุด)

หวังว่านี่จะช่วยได้!


ฉันใช้สิ่งนี้เพื่อรับ href การแจ้งเตือน ($ ( "# เผยแพร่เชื่อมโยง") attr ( "href").); และทำให้ฉันตื่นตัวว่า "ไม่ได้กำหนด"
gautamlakum

@ lakum4 ย้อนกลับไปที่คุณมักจะเรียกใช้รหัสการแจ้งเตือนก่อนที่คุณจะตั้งค่าhrefคุณลักษณะของคุณสมมติว่าตัวเลือกของคุณถูกต้อง
Valentin Flachsel

2
ลอง: การแจ้งเตือน ($ (". publish-link"). attr ("href")); เนื่องจากองค์ประกอบของคุณอาจเป็นคลาสแทนที่จะเป็น ID ในความเป็นจริงอาจจะใช้ $ (นี้) ถ้ามันอยู่ข้างในงานของคุณ
Tollan จิม

2

การเปรียบเทียบการทดสอบประสิทธิภาพขนาดเล็กสำหรับสามโซลูชั่น:

  1. $(".link").prop('href',"https://example.com")
  2. $(".link").attr('href',"https://example.com")
  3. document.querySelector(".link").href="https://example.com";

ป้อนคำอธิบายรูปภาพที่นี่

ที่นี่คุณสามารถทำการทดสอบได้ด้วยตัวเองhttps://jsperf.com/a-href-js-change


เราสามารถอ่านค่า href ได้หลายวิธี

  1. let href = $(selector).prop('href');
  2. let href = $(selector).attr('href');
  3. let href = document.querySelector(".link").href;

ป้อนคำอธิบายรูปภาพที่นี่

ที่นี่คุณสามารถทำการทดสอบได้ด้วยตัวเองhttps://jsperf.com/a-href-js-read


ดี! ผิดปกติฉันได้ผลลัพธ์ที่ตรงข้ามกับคุณ แต่มันก็น่าสนใจที่จะสามารถจัดการพวกมันเองได้
HoldOffHunger

@HoldOffHunger ใช่ - น่าสนใจมาก - เครื่องของคุณระบบปฏิบัติการและเบราว์เซอร์คืออะไร
Kamil Kiełczewski

1
FF59, Win10 ผลลัพธ์ดูเหมือนจะเปลี่ยนไปเล็กน้อยอีกครั้ง (อาจจะขึ้นอยู่กับ # ของแท็บที่เปิด) แต่ส่วนใหญ่ยังคงเหมือนเดิม: imgur.com/a/MLDnTWM Machine: Intel บอร์ดอายุ 10 ปี (dp55wg), 3.1ghz quad-core, หน่วยความจำ 16gb ddr3, gtx1070
HoldOffHunger

1
<style>
a:hover {
    cursor:pointer;
}
</style>

<script type="text/javascript" src="lib/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    $(".link").click(function(){
        var href = $(this).attr("href").split("#");
        $(".results").text(href[1]);
    })
})
</script>



<a class="link" href="#one">one</a><br />
<a class="link" href="#two">two</a><br />
<a class="link" href="#three">three</a><br />
<a class="link" href="#four">four</a><br />
<a class="link" href="#five">five</a>


<br /><br />
<div class="results"></div>

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