2010-12-27 8 views
1

Ich bin ein bisschen verwirrt die letzten paar Tage. Ich benutze meine JQUERY-Selektoren wann immer ich möchte ... aber ich habe nicht überprüft, ob ein Selektor existiert oder nicht, stattdessen habe ich die .each-Funktion benutzt.Meine JQuery existieren Funktion: macht es Sinn oder nicht?

var exist = function(obj){ 
    var returnObject ={}; 
    for(var key in obj){ 
     if(obj[key].length){ 
     returnObject[key] = obj[key]; 
     }else { 
     return false; 
     } 
    } 
    return returnObject; 
    } 
    //define all your selectors that would be needed for core functionality. 
    var activeSelectors = exist({ 
    selList : $('div.selectorone'), 
    selTag : $('a#tagtwo'), 
    selFloat : $(div.float) /*etc etc*/ 

    }) 

    if (activeSelectors) { 
    console.log('all my core selectors are here!'); 
    /* do Stuff*/ 
    } 

Ich weiß, das viel ein wenig aussieht, vor allem, wenn Sie nur einem Wähler brauchen, aber ich kann keine bessere Art und Weise (mit Ausnahme eines lame if-Anweisung in jedem Wähler) herauszufinden. Ich sah Menschen

mit

$('div#mySelector').each(function(){ /* do stuff*/});

aber ich bin nicht einverstanden, dass es schön ist. Beachten Sie, dass #mySelector (weil es eine ID ist) nur einmal erlaubt ist.

Ich würde das Feedback lieben. Bitte beachten Sie die Leistung vs Nizza Programmierung.

für weitere Informationen, bitte kommentieren Sie unten oder kontaktieren Sie mich!

+0

Nicht sicher, was Sie zu tun versuchen, aber '$ ('div.selectorone'). Length 'gibt 0 zurück, wenn es" leer "ist. So einfach' if' Aussage könnte sein, wonach Sie suchen. –

+0

@Shadow Wizard danke für Ihre Antwort. Die if-Anweisung würde ebenfalls funktionieren, aber der Code stoppt, nachdem ein Selektor nicht vorhanden ist. Daher wird er früh im Code gestoppt. Und eine andere Sache ist if ($ ('sel'). Length) {$ ('sel'.css())} Ich rufe das DOM zweimal auf, ich könnte var verwenden, aber ich mag 3 Zeilen Code (Leistung vs. nett) – Mimo

+2

warum sollte die if-aussage lahm sein? Die meisten jq-plugins basieren auf dem jeweiligen auf jeden Fall, so dass jeder von einem Selektor, der leer ist, sowieso nichts tut. Ich sehe keinen Sinn darin. – meo

Antwort

1

Wenn ich wirklich nur mit einem einfachen if Aussage vermeiden wollte, dann würde ich wahrscheinlich mit einer einfachen Funktion wie diese gehen nur:

var exists = function() 
{ 
    for (var i in arguments) 
    { 
     if ($(arguments[i]).length == 0) 
     { 
      return false; 
     } 
    } 

    return true; 
} 

Und rufen Sie es wie folgt aus:

var list = $('div.selectorone'); 
var tag = $('a#tagtwo'); 
var float = $('div.float'); 
if (exists(list, tag, float)) 
{ 
    // Do some stuff. 
} 

Oder:

if (exists('div.selectorone', 'a#tagtwo', 'div.float')) 
{ 
    // Do some stuff. 
} 

ich glaube, Sie Over-Engineering, das Problem aber. Alles, was Sie wirklich tun müssen, ist die Eigenschaft length für jede der von Ihnen getroffenen Auswahlen (d. H. Die Variablen list, tag, float) zu überprüfen.

Auch Leistung ist ein komplettes Nicht-Problem hier; ist die Methode zu überprüfen, ob die Elemente tatsächlich die Benutzererfahrung für Ihre Website beeinflussen? Als Donald Knuth sagte: vorzeitige Optimierung ist die Wurzel aller Übel:

Wir sollten etwa 97% der Zeit über kleine Effizienz, sagen vergessen.

+0

vousden .. auch danke für Ihre Antwort. Ich vermeide die if-Aussage nicht wirklich, ganz und gar nicht. Ich habe es lahm genannt, denn wenn Sie eine 'if' Anweisung verwenden, tun Sie es immer wieder bei jedem Selektor. if (sel.length) {// go} .. ich möchte vermeiden, meinen Selektor zweimal in dom aufzurufen. Also ich mag Ihre Funktion (es ist ein bisschen kleiner) mit Invoke nr1. aber es ist im Grunde die gleiche Funktion .. ich könnte 1 Variable entfernen, ich stimme zu. Leistung, die ich nicht kenne, aber wir müssen uns selbst zwingen, den besten Code zu machen, den es gibt, stimmst du nicht zu? – Mimo

+0

@Mimo: nein; Leistung sollte keine Überlegung sein, bis es sein muss. Schreiben Sie natürlich keinen langsamen Code, wenn es eine einfache Alternative gibt, die schneller ist, aber optimieren Sie sie nicht, es sei denn, es ist notwendig. Außerdem würde ich argumentieren, dass der "beste" Code lesbar und wartbar ist, bevor er schnell ist. –

Verwandte Themen