mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 22:05:44 +00:00
Make getElementsByClassName handle the root element properly. Bug 395915, r+sr=peterv, a=sicking.
This commit is contained in:
parent
af0aadaa6d
commit
b353757468
@ -1710,16 +1710,18 @@ NS_IMETHODIMP
|
||||
nsDocument::GetElementsByClassName(const nsAString& aClasses,
|
||||
nsIDOMNodeList** aReturn)
|
||||
{
|
||||
return GetElementsByClassNameHelper(mRootContent, aClasses, aReturn);
|
||||
return GetElementsByClassNameHelper(this, aClasses, aReturn);
|
||||
}
|
||||
|
||||
|
||||
// static GetElementsByClassName helpers
|
||||
nsresult
|
||||
nsDocument::GetElementsByClassNameHelper(nsIContent* aContent,
|
||||
nsDocument::GetElementsByClassNameHelper(nsINode* aRootNode,
|
||||
const nsAString& aClasses,
|
||||
nsIDOMNodeList** aReturn)
|
||||
{
|
||||
NS_PRECONDITION(aRootNode, "Must have root node");
|
||||
|
||||
nsAttrValue attrValue;
|
||||
attrValue.ParseAtomArray(aClasses);
|
||||
// nsAttrValue::Equals is sensitive to order, so we'll send an array
|
||||
@ -1733,8 +1735,8 @@ nsDocument::GetElementsByClassNameHelper(nsIContent* aContent,
|
||||
}
|
||||
|
||||
nsBaseContentList* elements;
|
||||
if (classes->Count() > 0 && aContent) {
|
||||
elements = new nsContentList(aContent, MatchClassNames,
|
||||
if (classes->Count() > 0) {
|
||||
elements = new nsContentList(aRootNode, MatchClassNames,
|
||||
DestroyClassNameArray, classes);
|
||||
} else {
|
||||
elements = new nsBaseContentList();
|
||||
|
@ -649,9 +649,10 @@ public:
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsDocument, nsIDocument)
|
||||
|
||||
/**
|
||||
* Utility method for getElementsByClassName
|
||||
* Utility method for getElementsByClassName. aRootNode is the node (either
|
||||
* document or element), which getElementsByClassName was called on.
|
||||
*/
|
||||
static nsresult GetElementsByClassNameHelper(nsIContent* aContent,
|
||||
static nsresult GetElementsByClassNameHelper(nsINode* aRootNode,
|
||||
const nsAString& aClasses,
|
||||
nsIDOMNodeList** aReturn);
|
||||
protected:
|
||||
|
@ -88,6 +88,7 @@ _TEST_FILES = test_bug5141.html \
|
||||
test_bug382113.html \
|
||||
test_bug390735.html \
|
||||
test_bug392511.html \
|
||||
test_bug395915.html \
|
||||
bug382113_object.html \
|
||||
test_CrossSiteXHR.html \
|
||||
file_CrossSiteXHR_fail1.xml \
|
||||
|
44
content/base/test/test_bug395915.html
Normal file
44
content/base/test/test_bug395915.html
Normal file
@ -0,0 +1,44 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html class="A b">
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=395915
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 395915</title>
|
||||
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=395915">Mozilla Bug 395915</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
/** Test for Bug 395915 **/
|
||||
is(document.getElementsByClassName("a").length, 0,
|
||||
"Class names are case-sensitive");
|
||||
is(document.getElementsByClassName("A").length, 1,
|
||||
"Have one node of class A");
|
||||
is(document.getElementsByClassName("A")[0], document.documentElement,
|
||||
"Root is class A");
|
||||
|
||||
is(document.getElementsByClassName("a b").length, 0,
|
||||
"Class names are case-sensitive two");
|
||||
is(document.getElementsByClassName("A B").length, 0,
|
||||
"Class names are case-sensitive three");
|
||||
is(document.getElementsByClassName("a B").length, 0,
|
||||
"Class names are case-sensitive four");
|
||||
is(document.getElementsByClassName("A b").length, 1,
|
||||
"Have one node of class 'A b'");
|
||||
is(document.getElementsByClassName("A b")[0], document.documentElement,
|
||||
"Root is class 'A b'");
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
Loading…
Reference in New Issue
Block a user