2016-04-12 35 views
0

Kullanıcıya url fragmanı tarafından belirlenen bölüm bir web sayfasında bulunamadığı zaman nasıl bilgilendirebilirim?URL bölümü ile tanımlanmış HTML bölümü web sitesi içinde bulunamadı

Örnek:

website1 içerir:

<a href="/website2#foo"> bring me to the foo section of website2 </a> 

ve web sitesi 2 içerir: Ben bağlantısını ve div tanımlayıcı tıklarsanız Yani

<div id="foo"> I'm the foo section </div> 

"foo değil "Ancak" bar "web sayfası" foo bölümü bulunamadı "gibi bir uyarı görüntüler.

Bağlam: Bir API için bir html sayfasının bir JSON yanıtını açığa vuruyorum ve JSON'un özelliklerinin bir belge sayfasına bağlanmasını istiyorum. Bu özniteliği açıklayan bölüm bulunamazsa, bir uyarı, belgeleri güncellemenizi önerir.

GÜNCELLEME:

Teşekkür

+0

Ama vanilya kullanarak belgedeki o kimliği aramaya website2? – NoobishPro

+1

Bence doğru yaklaşım web sitesinde2 olabilir (window.location.hash) window.location.hash.substring (1) 'i işaretleyin ve sonra getElementById kullanarak bu kimliği arayın. –

+0

@GaSacchi Tam olarak doğru. – mpen

cevap

3

Bu hile yapmalı. "OnLoad" Açık

I url içeriyorsa bir segment kontrol edip tamam javascript getElementById (segment) ..

<html> 
    <body onload="myFunction()"> 

     <h1>Hello World!</h1> 

     <script> 
     function myFunction() { 

      var segment; 

      if(window.location.hash){ 

       segment = window.location.hash.substring(1); 

       if(document.getElementById(segment) == null){ 

        alert("html element with id "+segment+" not found"); 
       } 
      } 
     } 

     </script> 
    </body> 
</html> 
+0

2nd 'if', hash olmadığında bir kontrolü kaydetmek için ilk önce hareket ettirilebilir. Ayrıca, bir '#' olduğunda uyarının görünmesini istiyor musunuz? (yani 'segment' boş) – mpen

+0

Benim durumumda evet, bu kimlikler otomatik olarak üretilecek çünkü bir özniteliğe bağlanırsak ve segment boşsa bir şeyin yanlış gittiğini bilmemiz gerekir. Evet, eğer ikincisinin içindeyseniz ikinci taşıyabilirsiniz. Teşekkürler –

0

eğer mümkünse javascript çerçeveler kullanmadan jQuery kullanıyor musunuz? Sen html veya css ile bunu yapamaz, ancak bu gibi jQuery ile çok kolay bir şekilde yapabilirsiniz:

html:

İşte vanilya js çözüm

$('.navigation a').on("click", function(){ 
     //This gets the href and splits it on "#". Grabs the value after "#" 
     //Make sure to only have 1 # in a link 
     var idToFind = $(this).attr("href").split("#")[1]; 

     //Check if a div with this ID exists 
     if($('#'+idToFind).length > 0){ 
     //it has been found, you could turn the scrolling to the section into a neat animation here, if you want 
     } 
     else{ 
     //It has not found it. Alert. 
     alert('"' + idToFind + '" section not found'); 
     } 

    }); 

düzenlemek

<a href="#foo" onClick="checkSection(this.href)"> bring me to the foo section </a> 

JavaScript:

function checkSection(section){ 
var idToFind = $(this).getAttribute("href").split("#")[1]; 
//Get the element 
var element = document.getElementById(idToFind); 

//check if element exists 
if (typeof(element) != 'undefined' && element != null) 
{ 
    // exists. 
} 
else{ 
    //doesn't exist 
    alert(idToFind + "doesn't exist"); 
} 

} 
+0

Çalışmayacak. Bölüm farklı bir sayfada. 'onclick' işleyicisi bunu yapmaz, kontrol diğer sayfada olmalıdır. – mpen

+1

Oh, üzgünüm, bu kısım bana hiç de açık değildi. Bu durumda, 'a'dan yaptığım değişkeni url hashtag'ına geçirebilir ve' a onClick = 'seçeneğini kaldırabilirsiniz. Bunun yerine, 'body' add 'onLoad =" function(); ". Ancak, şimdi bir başkasının bu şekilde cevap verdiğini görüyorum, o yüzden sanırım şu an sizin için bu soru sizin için cevap verdi. ** Düzenleme: ** oh, bu haha. – NoobishPro

+0

OP değilim. OP kendi sorusunu yanıtladı. – mpen