2012-10-02 15 views
11

Ich frage mich, wie man das Klicken auf ein :before Pseudo-Element aktivieren kann (der orange Teil des div auf der JSfiddle I Link zu unten). Ich habe gelesen, dass, da Pseudo-Elemente nicht im DOM sind, Sie dafür einen Hack benötigen würden. Leider kann ich keinen vorhandenen Stackoverflow Q & A finden, der tatsächlich funktionierenden Code zeigt.Verwenden Sie Javascript, um auf ein Pseudo-Element zu klicken?

-Link: http://jsfiddle.net/Vv6Eb/4/

HTML:

<div></div> 

CSS:

div { position:relative; background-color:#333; 
     padding:20px; margin:20px; float:left; 
} 

div:before { content:""; display:block; 
    padding:5px; background-color:#f60; border:2px solid white; 
    position: absolute; top:-2px; right:-2px; border-bottom-left-radius: 10px; 
} 
+2

Vielleicht haben Sie könnte mehr Informationen darüber enthalten, was Sie wollen? Es ist möglich, dass es eine andere Problemumgehung gibt, um das beabsichtigte Ergebnis zu erreichen. –

+1

Sie können nicht direkt an ein Pseudoelement binden, aber Sie können sich an das Element binden, das es erstellt, und durch Klicken auf das Pseudoelement wird immer das Ereignis ausgelöst, das an das generierende Element gebunden ist. Wenn Sie nur an den orangefarbenen Teil binden müssen, müssen Sie ein neues Element erstellen. – BoltClock

+0

@JamesMontagne, alles, was mich interessiert, ist in der Lage zu sein, auf das Pseudo-Element zu klicken, als würde man auf eine '' oder '

Antwort

8

Eine Abhilfe für dieses wäre, dynamisch eine <span> dem Element anhängen und einen Klick-Methode zuweisen. Like this fiddle.

var item = $('<span />'); 
item.click(function() { alert('click'); }); 
$('div').append(item); 

CSS

div { position:relative; background-color:#333; 
     padding:20px; margin:20px; float:left; 
} 

div span { content:""; display:block; 
    padding:5px; background-color:#f60; border:2px solid white; 
    position: absolute; top:-2px; right:-2px; border-bottom-left-radius: 10px; 
} 
+0

- @ ComputerArts, super danke, das wars, einfach! –

2

Ich weiß, dass Sie versuchen, zu verwenden: vor, aber für diese Situation kann nicht einfach erstellen ein neues div mit einer Klasse, die als Hook verwendet wird und an das ursprüngliche div angefügt wird?

So etwas wie dies funktionieren könnte:

var newDiv = $("<div class='orangeCircle'>"); 
$(".parentDivToOrangeCircle").append(newDiv); 

Und die CSS:

.parentDivToOrangeCircle { position:relative; background-color:#333; 
    padding:20px; margin:20px; float:left; 
} 

.orangeCircle { 
    padding:5px; background-color:#f60; border:2px solid white; 
    position: absolute; top:-2px; right:-2px; border-bottom-left-radius: 10px; 
} 
+0

- @ Jordan, ich brauche nicht zu benutzen: vorher. Wenn es einen anderen Weg gibt, würde ich es sehr schätzen zu sehen, wie der Code aussehen würde. –

16

Wenn Sie wissen, wo der Kreis sein "sollte", Sie Trigonometrie verwenden können, um zu sehen, ob der Klick innerhalb des Kreises ist: http://jsfiddle.net/Vv6Eb/19/

$("div").click(function(e){ 
    var $me = $(this), 
     width = $me.outerWidth(), 
     height = $me.outerHeight(), 
     top = $me.position().top, 
     left = $me.position().left; 

    var len = Math.sqrt(Math.pow(width - e.offsetX, 2) + Math.pow(e.offsetY, 2)); 

    if (len < 10) 
     alert('ding'); 
});​ 
+1

oh das ist cool! –

+0

eine großartige Idee. –

+0

Verwenden Sie nicht pow, um Quadrat zu berechnen, verwenden Sie '*' –

Verwandte Themen