ทดสอบรหัสต่อไปนี้ (ตัวอย่าง) ในเบราว์เซอร์ IE6, IE7, Firefox2+, Firefpx3+, Opera9.6+, Safari3.1+:
<div id = test>
<a href =#> ทดสอบ </a>
</div>
<div id = ผลลัพธ์> </div>
<script type = text/javascript>
(การทำงาน(){
var test = document.getElementById ('ทดสอบ');
การแจ้งเตือน (test.innerhtml);
var result = document.getElementById ('ผลลัพธ์');
result.innerhtml = test.innerhtml;
การแจ้งเตือน (result.innerhtml)
-
</script>
เป็นผลให้พบว่าค่า HREF ขององค์ประกอบ A ในผลลัพธ์ innerhtml โผล่ขึ้นมาเป็นครั้งที่สองในเบราว์เซอร์ IE6 และ IE7 กลายเป็นเส้นทางที่สมบูรณ์
อันที่จริงบรรพบุรุษของเราพบปัญหาเหล่านี้มานานแล้ว (ขอบคุณ Yu Bo สำหรับข้อมูลที่ให้ไว้):
โซลูชันการประมวลผลได้รับการกล่าวถึงในบทความข้างต้นซึ่งจะใช้วิธีการ getAttribute ('href', 2) ภายใต้ IE Microsoft ขยายพารามิเตอร์ที่สองไปยังวิธีนี้ซึ่งสามารถตั้งค่าเป็น 0, 1, 2 และหากตั้งค่าเป็น 2 ค่าดั้งเดิมของคุณสมบัติจะถูกส่งคืน
สคริปต์ได้รับการแก้ไขเป็น:
(การทำงาน(){
var test = document.getElementById ('ทดสอบ');
การแจ้งเตือน (test.innerhtml);
var result = document.getElementById ('ผลลัพธ์');
result.innerhtml = test.innerhtml;
if (/*@cc_on!@*/0) {// ถ้าเช่น
var links1 = test.getElementsByTagname ('a');
var links2 = result.getElementsByTagname ('a');
สำหรับ (var i = 0, len = links1.length; i <len; ++ i) {
links2 [i] .href = links1 [i] .getAttribute ('href', 2);
-
-
การแจ้งเตือน (result.innerhtml);
-
ในกระบวนการค้นหาปัญหานี้ฉันยังค้นหาข้อผิดพลาดที่น่าสนใจที่พบโดย Hedger Wang: เมื่อค่าแอตทริบิวต์ HREF ใหม่ถูกรีเซ็ตใน IE หากข้อความลิงก์มี http: // หรือ @, innerhtml ของมันจะแสดงไม่ถูกต้องและจะแสดงเป็นแอตทริบิวต์ Href
วิธีแก้ปัญหา (Shref เป็นค่าใหม่ของ HREF ที่จะตั้งค่า):
shref = 'http://www.hedgerwow.com';
var ismsie = /*@cc_on!@* /false;
if (ismsie) {
shref = '' + shref; // เพิ่มพื้นที่พิเศษก่อน href ใหม่
-
รายละเอียด: "Internet Explorer อาจรีเซ็ต InnerHTML ของ Anchor อย่างไม่ถูกต้องเมื่อมีการกำหนด HREF ใหม่"