2013-03-27 26 views
25

Tôi có một div lớn bên trong đó là div nhỏ hơn, thẻ achor và các yếu tố khác. Mỗi div lớn trong chương trình của tôi là ràng buộc để "mousedown" sự kiện và bên trong xử lý onMouseDown, tôi về cơ bản kiểm tra event.target.Kiểm tra xem mục tiêu sự kiện có phải là siêu liên kết

Nếu người dùng nhấp vào một mục là siêu liên kết, tôi muốn kiểm tra xem event.target có phải là siêu liên kết và sau đó điều hướng đến liên kết đó nếu event.target là siêu kết nối. Làm thế nào có thể được thực hiện?

Đây là cấu trúc của divsa và các phần tử.

<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

bạn có thể đưa ra một số mã .... như cách div của bạn được sắp xếp và nội dung – theshadowmonkey

+0

Tôi nghĩ rằng sự kiện này đang được xử lý bởi DIV gốc. Hãy thử console.log (sự kiện) trong Chrome tốt hơn và bạn sẽ thấy tất cả các parametrs mà bạn có thể thao tác. Tôi nghĩ rằng nên giúp đỡ trong một số hướng – theshadowmonkey

Trả lời

55

Bạn sẽ nhận được nó thông qua

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

và so sánh nó với nội dung gì? (Tôi biết, nhưng bạn nên bao gồm nó cho một câu trả lời hoàn chỉnh.) – Mathletics

+0

Điều đó có nghĩa nếu (event.target.tagname === 'a') {window.location.href = event.target}. Làm thế nào điều này được viết một cách chính xác trong JavaScript? – user1240679

+0

đã chỉnh sửa câu trả lời –

0

Tôi đã cố gắng thay đổi mã của bạn và có nhiều vấn đề với mã và sửa chữa chúng.

Đây là phần 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; 
}; 

Đây là phần HTML của nó

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

Tôi đã làm điều này trong một jsfiddle http://jsfiddle.net/KDejm/1/

Xin vui lòng cho tôi biết nếu các lỗ thông hơi là được chụp chính xác.

+0

Vấn đề ở đây là tôi muốn viết javascript unobstrive wihout bằng cách sử dụng id/class cụ thể nếu viết một cái gì đó như find() (có lẽ tìm kiếm một thẻ vẫn còn tốt trong ý nghĩa rằng nếu 'a' là có, sau đó điều hướng đến nó) Nếu tôi nhấp vào một phần tử khác với thẻ, thì tôi không muốn điều hướng đến liên kết thẻ đó. Thay vì thực hiện sự kiện từ sự kiện mouseDown mà tôi đã chỉnh sửa – user1240679

+0

... chỉ cần đặt phần window.location bên trong if :) – theshadowmonkey

+0

Trong javascript của tôi, tôi có div lớn hơn và như tôi đã viết trong bài đăng của tôi, div lớn hơn đó là nhận HTMl từ đâu đó và hiển thị nó bằng '.innerHTML'. Đó là div lớn hơn là một trong đó có sự kiện 'mousedown' ràng buộc và tôi không được phép thay đổi mã cụ thể đó. Vì vậy, về bản chất, tôi đang tìm kiếm một cách mà tôi có thể kiểm tra xem event.target có một thẻ anchor (Nếu nó có, sau đó điều hướng) Ngoài ra, không có jQuery cho phép bây giờ vì kiểu mã hóa trước đó. – user1240679

Các vấn đề liên quan