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/*/cssQuery.addModule("css-level2", function() {// -----------------------------------------------------------------------// selectors// -----------------------------------------------------------------------// child selectorselectors[">"] = function($results, $from, $tagName, $namespace) {var $element, i, j;for (i = 0; i < $from.length; i++) {var $subset = childElements($from[i]);for (j = 0; ($element = $subset[j]); j++)if (compareTagName($element, $tagName, $namespace))$results.push($element);}};// sibling selectorselectors["+"] = function($results, $from, $tagName, $namespace) {for (var i = 0; i < $from.length; i++) {var $element = nextElementSibling($from[i]);if ($element && compareTagName($element, $tagName, $namespace))$results.push($element);}};// attribute selectorselectors["@"] = function($results, $from, $attributeSelectorID) {var $test = attributeSelectors[$attributeSelectorID].test;var $element, i;for (i = 0; ($element = $from[i]); i++)if ($test($element)) $results.push($element);};// -----------------------------------------------------------------------// pseudo-classes// -----------------------------------------------------------------------pseudoClasses["first-child"] = function($element) {return !previousElementSibling($element);};pseudoClasses["lang"] = function($element, $code) {$code = new RegExp("^" + $code, "i");while ($element && !$element.getAttribute("lang")) $element = $element.parentNode;return $element && $code.test($element.getAttribute("lang"));};// -----------------------------------------------------------------------// attribute selectors// -----------------------------------------------------------------------// constantsAttributeSelector.NS_IE = /\\:/g;AttributeSelector.PREFIX = "@";// propertiesAttributeSelector.tests = {};// methodsAttributeSelector.replace = function($match, $attribute, $namespace, $compare, $value) {var $key = this.PREFIX + $match;if (!attributeSelectors[$key]) {$attribute = this.create($attribute, $compare || "", $value || "");// store the selectorattributeSelectors[$key] = $attribute;attributeSelectors.push($attribute);}return attributeSelectors[$key].id;};AttributeSelector.parse = function($selector) {$selector = $selector.replace(this.NS_IE, "|");var $match;while ($match = $selector.match(this.match)) {var $replace = this.replace($match[0], $match[1], $match[2], $match[3], $match[4]);$selector = $selector.replace(this.match, $replace);}return $selector;};AttributeSelector.create = function($propertyName, $test, $value) {var $attributeSelector = {};$attributeSelector.id = this.PREFIX + attributeSelectors.length;$attributeSelector.name = $propertyName;$test = this.tests[$test];$test = $test ? $test(this.getAttribute($propertyName), getText($value)) : false;$attributeSelector.test = new Function("e", "return " + $test);return $attributeSelector;};AttributeSelector.getAttribute = function($name) {switch ($name.toLowerCase()) {case "id":return "e.id";case "class":return "e.className";case "for":return "e.htmlFor";case "href":if (isMSIE) {// IE always returns the full path not the fragment in the href attribute// so we RegExp it out of outerHTML. Opera does the same thing but there// is no way to get the original attribute.return "String((e.outerHTML.match(/href=\\x22?([^\\s\\x22]*)\\x22?/)||[])[1]||'')";}}return "e.getAttribute('" + $name.replace($NAMESPACE, ":") + "')";};// -----------------------------------------------------------------------// attribute selector tests// -----------------------------------------------------------------------AttributeSelector.tests[""] = function($attribute) {return $attribute;};AttributeSelector.tests["="] = function($attribute, $value) {return $attribute + "==" + Quote.add($value);};AttributeSelector.tests["~="] = function($attribute, $value) {return "/(^| )" + regEscape($value) + "( |$)/.test(" + $attribute + ")";};AttributeSelector.tests["|="] = function($attribute, $value) {return "/^" + regEscape($value) + "(-|$)/.test(" + $attribute + ")";};// -----------------------------------------------------------------------// parsing// -----------------------------------------------------------------------// override parseSelector to parse out attribute selectorsvar _parseSelector = parseSelector;parseSelector = function($selector) {return _parseSelector(AttributeSelector.parse($selector));};}); // addModule