Leaky Abstraction: JQuery und Co

Beitrag lesen

function checked(sel){
if ($(sel).is(":checked")){
if ($(sel).is(":disabled")) return false;
else return true;
}
else return false;
}

Dazu brauchst du jQuery? Wenn du es performant haben willst, kannst du diese Aufgabe auch ohne "syntactic sugar" erledigen.

Was steht bei dir in sel drin? Am performantesten sind ID-Selektoren. Wenn deine Checkbox eine ID hat (macht Sinn z.B. wegen <label>), dann ist $('#id') sehr schnell.

Ohne Bibliothek (mit Ansprechen des Elements über eine ID) könnte man schreiben:

function checked (id)
  var checkbox = document.getElementById(id);
  if (!checkbox) return false;
  return checkbox.http://de.selfhtml.org/javascript/objekte/elements.htm#checked@title=checked && !checkbox.http://de.selfhtml.org/javascript/objekte/elements.htm#disabled@title=disabled;
}

Sind verschachtelte Funktionsaufrufe den so verkehrt?

.is() ist für so etwas Unsinn, weil es die Selektor-Engine anwirft, obwohl du nur ein paar Objekteigenschaften abfragen willst. .attr() reicht hier aus. Außerdem sollte man das Suchen des Elements nicht zweimal durchführen, sondern das Ergebnis von $() (das jQuery-Objekt mit dem Knoten-Set) zwischenspeichern:

function checked (sel) {
  var el = $(sel);
  return el.attr('checked') && !el.attr('disabled');
}