Ticket #8401: gEBCN.diff
| File gEBCN.diff, 4.6 kB (added by mislav, 2 years ago) |
|---|
-
test/unit/dom.html
old new 207 207 <ul class="A B" id="class_names_ul"> 208 208 <li class="C"></li> 209 209 <li class="A C"></li> 210 <li class="1"></li> 210 211 </ul> 211 212 <div class="B C D"></div> 212 213 </div> … … 381 382 }}, 382 383 383 384 testGetElementsByClassName: function() {with(this) { 385 var div = $('class_names'), list = $('class_names_ul'); 386 384 387 assertElementsMatch(document.getElementsByClassName('A'), 'p.A', 'ul#class_names_ul.A', 'li.A.C'); 385 assertElementsMatch(document.getElementsByClassName('A', 'class_names_ul'), 'li.A.C'); 386 assertElementsMatch(document.getElementsByClassName('B', 'class_names'), 'ul#class_names_ul.A.B', 'div.B.C.D'); 387 assertElementsMatch(document.getElementsByClassName('B', 'class_names_ul')); 388 assertElementsMatch(list.getElementsByClassName('A'), 'li.A.C'); 389 assertElementsMatch(list.getElementsByClassName('C A'), 'li.A.C'); 390 assertElementsMatch(div.getElementsByClassName('B'), 'ul#class_names_ul.A.B', 'div.B.C.D'); 391 assertElementsMatch(div.getElementsByClassName('D C B'), 'div.B.C.D'); 392 assertElementsMatch(list.getElementsByClassName('B')); 393 // http://lxr.mozilla.org/mozilla/source/content/base/test/test_bug357450.js 394 assertElementsMatch(list.getElementsByClassName('1'), 'li.1'); 395 assertElementsMatch(list.getElementsByClassName([1]), 'li.1'); 396 assertElementsMatch(list.getElementsByClassName(['1 junk'])); 397 assertElementsMatch(list.getElementsByClassName('')); 398 assertElementsMatch(list.getElementsByClassName({})); 388 399 }}, 389 400 390 401 testElementInsertWithHTML: function() {with(this) { -
test/lib/unittest.js
old new 484 484 assertElementsMatch: function() { 485 485 var expressions = $A(arguments), elements = $A(expressions.shift()); 486 486 if (elements.length != expressions.length) { 487 this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions ');487 this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions (' + expressions.inspect() + ')'); 488 488 return false; 489 489 } 490 490 elements.zip(expressions).all(function(pair, index) { -
src/dom.js
old new 18 18 results.push(query.snapshotItem(i)); 19 19 return results; 20 20 }; 21 22 document.getElementsByClassName = function(className, parentElement) { 23 var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; 24 return document._getElementsByXPath(q, parentElement); 25 } 26 27 } else document.getElementsByClassName = function(className, parentElement) { 28 var children = ($(parentElement) || document.body).getElementsByTagName('*'); 29 var elements = [], child; 30 for (var i = 0, length = children.length; i < length; i++) { 31 child = children[i]; 32 if (Element.hasClassName(child, className)) 33 elements.push(Element.extend(child)); 34 } 35 return elements; 36 }; 21 } 37 22 38 23 /*--------------------------------------------------------------------------*/ 39 24 … … 617 602 } 618 603 }; 619 604 605 if (!document.getElementsByClassName) { 606 Element.Methods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? 607 function(element, className) { 608 var iter = function(name) { return "[contains(concat(' ', @class, ' '), ' " + name + " ')]" }; 609 var q = './/*' + (/\s/.test(className) ? $w(className.toString()).map(iter).join('') : iter(className)); 610 return document._getElementsByXPath(q, element); 611 } : function(element, className) { 612 var children = $(element).getElementsByTagName('*'); 613 var elements = [], classNames = $w(className.toString()); 614 className = ' ' + className + ' '; 615 616 for (var i = 0, child, cn; child = children[i]; i++) { 617 if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || 618 classNames.all(function(name) { return cn.include(' ' + name + ' ') }))) 619 elements.push(Element.extend(child)); 620 } 621 return elements; 622 }; 623 624 document.getElementsByClassName = function(className, parentElement) { 625 return $(parentElement || document.body).getElementsByClassName(className); 626 } 627 } 628 620 629 Object.extend(Element.Methods, { 621 630 childElements: Element.Methods.immediateDescendants 622 631 });