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 /

Était-ce utile?

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');
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top