2013-03-27 10 views
25

Mam duży div wewnątrz, który jest mniejszy, znaczniki achor i inne elementy. Każdy duży div w moim programie jest związany z wydarzeniem "mousedown" i wewnątrz obsługi onMouseDown, w zasadzie sprawdzam event.target.Sprawdź, czy celem zdarzenia jest hiperłącze

Jeśli użytkownik kliknie na element, który jest hiperłączem, chcę sprawdzić, czy event.target był hiperłączem, a następnie przejść do tego linku, jeśli event.target był hiperłączem. Jak to zrobić?

Oto struktura elementów divsa i elementów.

<div class="camp-name"> 
    <span class="btnCampaign"><div class=""></div></span> 
    <span class="campaign-name"> 
     <a href="http://www.google.com">Some Link here</a> 
    </span> 
</div> 
<div class="campaign-name-sub"> 
    <span class="campaign-accountname">Some Text here</span> 
    <span class="seprator">|</span> 
    <span class="brandname">Some Text here</span> 
</div> 

JS

var label = label.createElement("DIV"); 
label.innerHMTL = src //src is the above html that is seen here 
    Plugin.addEventListener(label, "mousedown", params.onMouseDown); 


Plugin.onMouseDown() = function(event) { 
var target = (event.currentTarget) ? event.currentTarget : event.srcElement; 
     if (target.tagName.toLowerCase() === "a" && target !== undefined) { 
      console.log(target.href); 
      Plugin.stopPropagation(event); 
     } 
}; 
+0

możesz zgasić kod ... jak twoi div są zorganizowani i rzeczy – theshadowmonkey

+0

Wydaje mi się, że wydarzenie jest przetwarzane przez rodzica DIV. Wypróbuj konsolę console.log (zdarzenie) w Chrome i powinieneś zobaczyć wszystkie parametry, którymi możesz manipulować. Myślę, że powinno to pomóc w pewnym kierunku – theshadowmonkey

Odpowiedz

55

Powinieneś dostać go przez

if(event.target.tagName.toLowerCase() === 'a') 
{ 
    event.target.href; //this is the url where the anchor tag points to. 
} 
+0

i porównuję go z czym? (Wiem, ale powinieneś dołączyć to dla pełnej odpowiedzi.) – Mathletics

+0

To znaczy, jeśli (event.target.tablame === 'a') {window.location.href = event.target}. Jak to jest poprawnie napisane w JavaScript? – user1240679

+0

edytował odpowiedź –

0

Próbowałem modyfikowania kodu i było wiele problemów z kodem i skorygować je.

Jest to część JavaScript

var src = '<div class="camp-name"><span class="btnCampaign"><div class=""></div></span><span class="campaign-name"><a href="http://www.google.com">Some Link here</a></span></div>'; 

var label = document.createElement('DIV') 
label.innerHTML = src; 
var topdiv = document.getElementById("test"); 
console.log(label) 
topdiv.appendChild(label); 

label.addEventListener('click', test, false); 

function test(event) { 
    if(event.target.tagName.toLowerCase() === 'a') { 
     var href = event.target.href; 
     console.log(href); 
    } 
    window.location = href; 
}; 

Jest to część HTML niego

<div id="test"> 
test 
</div> 

Zrobiłem to w jsfiddle http://jsfiddle.net/KDejm/1/

Proszę dać mi znać, jeśli otwór jest poprawnie zrobione.

+0

Problem polega na tym, że chcę pisać nieobciążony javascript bez użycia konkretnego identyfikatora/klasy, jeśli piszę coś takiego jak find() (prawdopodobnie szukanie tagu jest nadal w porządku w tym sensie, że jeśli "a" jest tam, to przejdź do niego) Jeśli kliknę element inny niż tag, nie chcę przechodzić do tego linku tagu. Zamiast tego coś z tego zdarzenia MouseDown, które już mam – user1240679

+0

edytowane ... po prostu umieść część window.location wewnątrz if :) – theshadowmonkey

+0

W moim javascript, mam większy div i jak napisałem w moim poście, że większy div jest pobierając HTMl skądś i wyświetlając go przez '.innerHTML'. Ten większy div jest tym, który jest związany ze zdarzeniem "mousedown" i nie mogę zmienić tego konkretnego kodu. Tak więc, w zasadzie, szukałem sposobu, dzięki któremu mogę sprawdzić, czy event.target ma znacznik zakotwiczenia (jeśli ma, to nawigacja) Ponadto, jQuery nie jest dozwolona z powodu wcześniejszego stylu kodowania. – user1240679