prototype: Deprecate document.getElementsByClassName and Element#getElementsByClassName since native versions return a NodeList and we can only return an Array. Please use $$ or Element#select instead.
This commit is contained in:
parent
cf88669931
commit
c904fe7664
|
@ -1,5 +1,8 @@
|
|||
*SVN*
|
||||
|
||||
* Deprecate document.getElementsByClassName and Element#getElementsByClassName since native versions return a NodeList and we can only return an Array. Please use $$ or Element#select instead. [sam]
|
||||
For more information see https://bugzilla.mozilla.org/show_bug.cgi?id=390411
|
||||
|
||||
* Fix missing "var" in selector.js. Closes #9761. [Tobie Langel]
|
||||
|
||||
* Date#toJSON now returns times in UTC for better compatibility with json.js. Closes #9332. [Tobie Langel]
|
||||
|
|
|
@ -113,6 +113,41 @@ var Position = {
|
|||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
|
||||
function iter(name) {
|
||||
return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
|
||||
}
|
||||
|
||||
instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
|
||||
function(element, className) {
|
||||
className = className.toString().strip();
|
||||
var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
|
||||
return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
|
||||
} : function(element, className) {
|
||||
className = className.toString().strip();
|
||||
var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
|
||||
if (!classNames && !className) return elements;
|
||||
|
||||
var nodes = $(element).getElementsByTagName('*');
|
||||
className = ' ' + className + ' ';
|
||||
|
||||
for (var i = 0, child, cn; child = nodes[i]; i++) {
|
||||
if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
|
||||
(classNames && classNames.all(function(name) {
|
||||
return !name.toString().blank() && cn.include(' ' + name + ' ');
|
||||
}))))
|
||||
elements.push(Element.extend(child));
|
||||
}
|
||||
return elements;
|
||||
};
|
||||
|
||||
return function(className, parentElement) {
|
||||
return $(parentElement || document.body).getElementsByClassName(className);
|
||||
};
|
||||
}(Element.Methods);
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
Element.ClassNames = Class.create();
|
||||
Element.ClassNames.prototype = {
|
||||
initialize: function(element) {
|
||||
|
|
33
src/dom.js
33
src/dom.js
|
@ -633,39 +633,6 @@ Element.Methods = {
|
|||
|
||||
Element.Methods.identify.counter = 1;
|
||||
|
||||
if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
|
||||
function iter(name) {
|
||||
return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
|
||||
}
|
||||
|
||||
instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
|
||||
function(element, className) {
|
||||
className = className.toString().strip();
|
||||
var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
|
||||
return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
|
||||
} : function(element, className) {
|
||||
className = className.toString().strip();
|
||||
var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
|
||||
if (!classNames && !className) return elements;
|
||||
|
||||
var nodes = $(element).getElementsByTagName('*');
|
||||
className = ' ' + className + ' ';
|
||||
|
||||
for (var i = 0, child, cn; child = nodes[i]; i++) {
|
||||
if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
|
||||
(classNames && classNames.all(function(name) {
|
||||
return !name.toString().blank() && cn.include(' ' + name + ' ');
|
||||
}))))
|
||||
elements.push(Element.extend(child));
|
||||
}
|
||||
return elements;
|
||||
};
|
||||
|
||||
return function(className, parentElement) {
|
||||
return $(parentElement || document.body).getElementsByClassName(className);
|
||||
};
|
||||
}(Element.Methods);
|
||||
|
||||
Object.extend(Element.Methods, {
|
||||
getElementsBySelector: Element.Methods.select,
|
||||
childElements: Element.Methods.immediateDescendants
|
||||
|
|
Loading…
Reference in New Issue