Blame | Letzte Änderung | Log anzeigen | RSS feed
/*cssQuery, version 2.0.2 (2005-08-19)Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)License: http://creativecommons.org/licenses/LGPL/2.1/*//* Thanks to Bill Edney */cssQuery.addModule("css-level3", function() {// -----------------------------------------------------------------------// selectors// -----------------------------------------------------------------------// indirect sibling selectorselectors["~"] = function($results, $from, $tagName, $namespace) {var $element, i;for (i = 0; ($element = $from[i]); i++) {while ($element = nextElementSibling($element)) {if (compareTagName($element, $tagName, $namespace))$results.push($element);}}};// -----------------------------------------------------------------------// pseudo-classes// -----------------------------------------------------------------------// I'm hoping these pseudo-classes are pretty readable. Let me know if// any need explanation.pseudoClasses["contains"] = function($element, $text) {$text = new RegExp(regEscape(getText($text)));return $text.test(getTextContent($element));};pseudoClasses["root"] = function($element) {return $element == getDocument($element).documentElement;};pseudoClasses["empty"] = function($element) {var $node, i;for (i = 0; ($node = $element.childNodes[i]); i++) {if (thisElement($node) || $node.nodeType == 3) return false;}return true;};pseudoClasses["last-child"] = function($element) {return !nextElementSibling($element);};pseudoClasses["only-child"] = function($element) {$element = $element.parentNode;return firstElementChild($element) == lastElementChild($element);};pseudoClasses["not"] = function($element, $selector) {var $negated = cssQuery($selector, getDocument($element));for (var i = 0; i < $negated.length; i++) {if ($negated[i] == $element) return false;}return true;};pseudoClasses["nth-child"] = function($element, $arguments) {return nthChild($element, $arguments, previousElementSibling);};pseudoClasses["nth-last-child"] = function($element, $arguments) {return nthChild($element, $arguments, nextElementSibling);};pseudoClasses["target"] = function($element) {return $element.id == location.hash.slice(1);};// UI element statespseudoClasses["checked"] = function($element) {return $element.checked;};pseudoClasses["enabled"] = function($element) {return $element.disabled === false;};pseudoClasses["disabled"] = function($element) {return $element.disabled;};pseudoClasses["indeterminate"] = function($element) {return $element.indeterminate;};// -----------------------------------------------------------------------// attribute selector tests// -----------------------------------------------------------------------AttributeSelector.tests["^="] = function($attribute, $value) {return "/^" + regEscape($value) + "/.test(" + $attribute + ")";};AttributeSelector.tests["$="] = function($attribute, $value) {return "/" + regEscape($value) + "$/.test(" + $attribute + ")";};AttributeSelector.tests["*="] = function($attribute, $value) {return "/" + regEscape($value) + "/.test(" + $attribute + ")";};// -----------------------------------------------------------------------// nth child support (Bill Edney)// -----------------------------------------------------------------------function nthChild($element, $arguments, $traverse) {switch ($arguments) {case "n": return true;case "even": $arguments = "2n"; break;case "odd": $arguments = "2n+1";}var $$children = childElements($element.parentNode);function _checkIndex($index) {var $index = ($traverse == nextElementSibling) ? $$children.length - $index : $index - 1;return $$children[$index] == $element;};// it was just a number (no "n")if (!isNaN($arguments)) return _checkIndex($arguments);$arguments = $arguments.split("n");var $multiplier = parseInt($arguments[0]);var $step = parseInt($arguments[1]);if ((isNaN($multiplier) || $multiplier == 1) && $step == 0) return true;if ($multiplier == 0 && !isNaN($step)) return _checkIndex($step);if (isNaN($step)) $step = 0;var $count = 1;while ($element = $traverse($element)) $count++;if (isNaN($multiplier) || $multiplier == 1)return ($traverse == nextElementSibling) ? ($count <= $step) : ($step >= $count);return ($count % $multiplier) == $step;};}); // addModule