سؤال

هل حقا يمكن أن يكون صحيحا أن 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 ).

http://www.glennjones.net/post/809/getAttributeHrefBug.htm

نصائح أخرى

أعتقد أنه تم تنفيذه على هذا النحو في كل 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');
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top