2009-10-20 14 views
29

Bir bağlantı için attr("href") komutunun diğer tüm tarayıcılarla karşılaştırıldığında IE7'de çok farklı şekilde işlenebileceği gerçekten doğru olabilir mi?IE7'de .attr ("href") 'ın yanlış okunması diğer tüm tarayıcılarla karşılaştırılabilir mi?

ı http://example.com/page.html bir sayfa var ve bu HTML var diyelim:

<a href="#someAnchor" class="lnkTest">Link text</a> 

ve bu jQuery:

var strHref = $(".lnkTest").attr("href"); 

Sonra IE7'de strHref değişkeninin değeri "http://example.com/page.htm#someAnchor" ama olacak diğer tarayıcılarda "#someAnchor" olacaktır.

Son bahsedilen durumun en doğru olanı olduğuna inanıyorum, bu yüzden IE7'nin kötü bir çocuk olması mı yoksa jQuery'deki bir hata mı? Sadece .get(0).href tutarlılık için kullanılmasını öneririz -

+2

gibi yapmaktır İkisinden de biraz. – Keith

+0

Bu, son zamanlarda öğrendiğim gibi IE8'de de oluyor. Eklemek için hangi etiketin kaldırıldığından emin değil. Yine de jQuery ile sınırlı değil. GetAttributeNode ("href") kullanırken oluşur. –

cevap

18

Kesinlikle değil yerine .getAttribute('href') ait tarayıcıları tutarsız uygulamalar bir jQuery hata ama bu.

Mutlak URI'yi istemiyorsanız, IE ve Mozilla'da öznitelik metnine .get(0).getAttribute('href', 2) kullanarak erişebilirsiniz. Ancak bu işlem Opera'da çalışmaz ve Safari/Chrome/başka bir şeyde denemedim.

Ayrıca, etki alanını keser ya da .get(0).href için '#' üzerinde bölünebilir ve hatta '#' içerdiği varsayılarak dizinin ikinci bölümünü de kullanabilirsiniz (.length'u kontrol edin).

http://www.glennjones.net/Post/809/getAttributehrefbug.htm

+0

Href'in çapa kısmının nasıl alınacağı ile ilgili bir soru değildi. Bunu kendimden anladım. Farkın neden var olduğunu merak ettim. Ama yine de cevaplamak için çok teşekkürler. Ben çapa parçası almak gerekiyordu, bu yüzden doğru değeri ayıklamak için sadece substring kullandım :) – EmKay

+0

Bu konuya bugün IE8 ile koştu. http://app.somedomain.com/virtualDir/page.aspx gibi bir tam alan adı kullanmış olsaydık, nitelik metninin geri döndüğünü öğreniriz. Ancak sadece netbios makine adını kullansaydık, mutlak url geri döndü ... garipti. – CedricB

+6

jQuery, davranışı Event nesnelerinde olduğu gibi standartlaştırmaya yardımcı olabilirdi. –

1

kullandığım:

var hrefArr = $(this).attr('href').split('/'); 
var id = hrefArr[hrefArr.length-1]; 

Ben "/" son sonra her şeyi gerektiğinde.

+0

ile test edildi Ama sonra href "http://example.com/folder/page.htm" veya basitçe "/ folder/page" .htm "? Sonra sadece "page.htm" olacaksınız ve bu doğru değil. – EmKay

+0

Bu sadece basit bir örnek göstermek içindi. Burada kod örneğim yok, ancak diziden geçebilir ve dizeleri kontrol edebilirsiniz. Örneğin, sonunda ".com" içeren bir alt tabakadan sonra tüm dizeler. İleri doğru .... – chrwahl

+0

Böyle şeyler için normal ifadeler kullanmalısınız. Kırılmaya daha az muhtemel. – Keyo

4

Tüm IE 7+ sürümlerinde olduğu gibi uygulandığına inanıyorum.

kullandığım:

var href=jQuery('#foo').attr('href'); 
href=href.substring(href.indexOf('#')); 

yardımcı olur Umut! Şerefe.

+0

(Görünüşe göre bir 'this.hash' özelliği de var, çoğu tarayıcıda JavaScript İncil 603 sayfasını (http://goo.gl/OF16Q), en azından IE 7'de göreceksin. 'substr' demeye gerek yok.) – KajMagnus

2

Bu sorunla ilgili bir hata buldum: http://bugs.jquery.com/ticket/2747 jQuery, IE7 'bug' için bir geçici çözüm uyguladı. Ancak jQuery 1.7.1'de bu hata yeniden verildi. http://bugs.jquery.com/ticket/11129

+2

Hata "kapatılamıyor" şeklinde kapatıldığını, ancak verdikleri testin hatalı olduğunu fark ettim. Hatayı göstermek için yeni bir JSFiddle testi oluşturdum - umarım bilet yeniden açılır. –

+0

..... aaaaaand tekrar kapatıldı .... –

+0

Ayrıca benim için 1.7.1 de olur – Armand

0

Sonra href üzerinden() metodu şeridi yerine JavaScript kullanarak, PHP ile bir değişken oluşturmak sona:

<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> 
1

başka bir yoludur I 1.7.1 yeni bir hata oluşturulan Sadece href

<a data-href="#anchor-0">example</a> 

'u kullanmak için bir veri niteliği kullanmak.

var href = $(this).attr('data-href'); 
-1

Sorun, IE7 ve IE8'in de metni değiştirmesidir.IE7 tutarsız olmakla jQuery hala işlemesi gerektiğini - Yani iyi bir geçici çözüm bu

$('#linkId').attr('href','newlink').text('oldtext');