الخطأ استخراج .attr("href") في IE7 مقابل جميع المتصفحات الأخرى ؟
-
22-09-2019 - |
سؤال
هل حقا يمكن أن يكون صحيحا أن attr("href")
الأمر وصلة معالجة مختلفة جدا في IE7 بالمقارنة مع جميع المتصفحات الأخرى ؟
دعونا نقول لدي صفحة في http://example.com/page.html وأنا HTML:
<a href="#someAnchor" class="lnkTest">Link text</a>
وهذا مسج:
var strHref = $(".lnkTest").attr("href");
ثم في IE7 قيمة strHref
المتغير سوف يكون "http://example.com/page.htm#someAnchor"
لكن في المتصفحات الأخرى سيكون "#someAnchor"
.
وأعتقد أن آخر ذكر الحالة هو الراجح واحد ، لذلك هو مجرد حالة من IE7 كونه الولد الشرير أو هو خلل في jQuery ؟
المحلول
إنه بالتأكيد ليس خطأ في jQuery ولكن بدلاً من ذلك تتصفح تطبيقات غير متسقة .getAttribute('href')
- أقترح استخدام فقط .get(0).href
للاتساق.
يبدو أنه يمكنك الوصول إلى نص السمة في IE و Mozilla باستخدام .get(0).getAttribute('href', 2)
إذا كنت لا تريد URI المطلق. لاحظ أن هذا لن يعمل في الأوبرا ولم أختبره في Safari/Chrome/أي شيء آخر.
يمكنك أيضًا تجريد المجال أو الانقسام على "#" .get(0).href
واستخدم الجزء الثاني من الصفيف على افتراض أنه يحتوي على "#" (تحقق .length
).
نصائح أخرى
أعتقد أنه تم تنفيذه على هذا النحو في كل IE 7+.
أنا أستعمل:
var href=jQuery('#foo').attr('href');
href=href.substring(href.indexOf('#'));
أتمنى أن يساعد! هتافات.
لقد وجدت خطأ يتعلق بهذه القضية: http://bugs.jquery.com/ticket/2747 نفذت jQuery حل بديل لـ IE7 'bug'. ولكن في jQuery 1.7.1 أعيد تقديم هذا الخطأ. لقد قمت بإنشاء خطأ جديد لـ 1.7.1: http://bugs.jquery.com/ticket/11129
أنا أستعمل:
var hrefArr = $(this).attr('href').split('/');
var id = hrefArr[hrefArr.length-1];
عندما أحتاج إلى كل شيء بعد آخر "/".
طريقة أخرى هي أن مجرد استخدام البيانات السمة href بدلا من
<a data-href="#anchor-0">example</a>
.
var href = $(this).attr('data-href');
انتهى إنشاء متغير عن طريق PHP, ثم باستخدام جافا سكريبت استبدال() طريقة لتجريدها من href:
<script>var domain = 'http://<?=$_SERVER['HTTP_HOST']?>';</script>
<script>
$(function(){
/* prevent default action of all anchors with hash class */
$('#canvas').on('click', 'a.hash', function(event) {
event.preventDefault();
// get the href of the anchor
var hash = '!' + $(this).attr('href');
// remove the absolute url if it exists
hash = hash.replace( domain, '' );
// redirect
window.location.hash = hash;
});
});
</script>
المشكلة هي أن IE7 و IE8 تغيير النص أيضًا. لذا فإن حلًا جيدًا هو أن تفعل مثل هذا
$('#linkId').attr('href','newlink').text('oldtext');