Ajouter un événement de clic pour Div et aller au premier lien fourni
-
27-09-2019 - |
Question
Je pense que je suis trop de temps à cette fonction et je viens juste coincé à essayer de comprendre la belle façon propre de le faire.
Il est une fonction jQuery qui ajoute un événement de clic à tout div
qui a une classe click
CSS. Lorsque vous cliquez sur ce div.click
il redirige l'utilisateur vers le premier lien qui se trouve en elle.
function clickabledivs() {
$('.click').each(
function (intIndex) {
$(this).bind("click", function(){
window.location = $( "#"+$(this).attr('id')+" a:first-child" ).attr('href');
});
}
);
}
Le code fonctionne tout simplement même si je suis sûr qu'il ya une façon assez mieux pour l'accomplir, spécialement le sélecteur j'utilise: $( "#"+$(this).attr('id')+" a:first-child" )
. Tout semble long et lent. Des idées?
S'il vous plaît laissez-moi savoir si vous avez besoin de plus de détails.
PS: J'ai trouvé une référence d'analyse comparative jQuery vraiment sympa de Project2k.de ici: http://blog.projekt2k.de/2010/01/benchmarking -jquery-1-4 /
La solution
Selon le nombre de ces éléments div.click
que vous avez, vous pouvez utiliser la délégation de l'événement pour gérer ces clics. Cela signifie l'aide d'un seul gestionnaire d'événement pour tous les divs qui ont la classe click
. Puis, à l'intérieur de ce gestionnaire d'événements, votre rappel des actes fondés sur ce qui div.click
l'origine de l'événement. Comme ceci:
$('#div-click-parent').click(function (event)
{
var $target = $(event.target); // the element that fired the original click event
if ($target.is('div.click'))
{
window.location.href = $target.find('a').attr('href');
}
});
gestionnaires d'événements Moins de moyens plus d'échelle -. Plusieurs éléments div.click
ne ralentira pas votre gestion des événements
Autres conseils
délégation optimisée avec jQuery 1.7 +
$('#div-click-parent').on('click', 'div.click', function () {
window.location.href = $(this).find('a').attr('href');
});
Au lieu de lier tous les clics sur la charge, pourquoi ne pas les lier à un clic? Devrait être beaucoup plus optimale.
$(document).ready(function() {
$('.click').click(function() {
window.location = $(this).children('a:first').attr('href');
return false;
});
});
Je probablement faire quelque chose comme:
$('.click').click(function(e){
window.location.href = $(this).find('a').attr('href');
});