]> source.dussan.org Git - gwtquery.git/commitdiff
implement has() method
authorManolo Carrasco <manolo@apache.org>
Sat, 27 Aug 2011 21:04:49 +0000 (21:04 +0000)
committerManolo Carrasco <manolo@apache.org>
Sat, 27 Aug 2011 21:04:49 +0000 (21:04 +0000)
gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java
gwtquery-core/src/main/java/com/google/gwt/query/client/LazyGQuery.java
gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngine.java
gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTest.java

index d9a05ef0ad727b3e92a902b9c843f84366c46258..96473dbd956188d4a8351453149b8630916c342c 100644 (file)
@@ -1864,9 +1864,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * filters at once.\r
    */\r
   public GQuery filter(String... filters) {\r
-\r
     JsNodeArray array = JsNodeArray.create();\r
-\r
     for (String f : filters) {\r
       for (Element e : elements) {\r
         boolean ghostParent = false;\r
@@ -1993,6 +1991,31 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
   public GQuery gt(int pos) {\r
     return $(slice(pos + 1, -1));\r
   }\r
+  \r
+\r
+  /**\r
+   * Reduce the set of matched elements to those that have a descendant \r
+   * that matches the selector.\r
+   */\r
+  public GQuery has(final String selector) {\r
+    return filter(new Predicate(){\r
+      public boolean f(Element e, int index) {\r
+        return !$(selector, e).isEmpty();\r
+      }\r
+    });\r
+  }\r
+\r
+  /**\r
+   * Reduce the set of matched elements to those that have a descendant \r
+   * that matches the Element.\r
+   */\r
+  public GQuery has(final Element elem) {\r
+    return filter(new Predicate(){\r
+      public boolean f(Element e, int index) {\r
+        return engine.contains(e, elem);\r
+      }\r
+    });\r
+  }\r
 \r
   /**\r
    * Returns true any of the specified classes are present on any of the matched\r
index dfa090facc284f9a94786f5b6ae7fdc4091bbb78..b2d1d37e1a576d4aa38da9a5367bdbc60783019b 100644 (file)
@@ -1082,6 +1082,18 @@ public interface LazyGQuery<T> extends LazyBase<T>{
    */
   LazyGQuery<T> gt(int pos);
 
+  /**
+   * Reduce the set of matched elements to those that have a descendant 
+   * that matches the selector.
+   */
+  LazyGQuery<T> has(String selector);
+
+  /**
+   * Reduce the set of matched elements to those that have a descendant 
+   * that matches the Element.
+   */
+  LazyGQuery<T> has(Element elem);
+
   /**
    * Returns true any of the specified classes are present on any of the matched
    * elements.
index c013a2265e29fe6f2902ac97feb0b562ad185f71..46de0000a90c4ddc489fa474a302c8e1351c2c61 100644 (file)
@@ -139,6 +139,10 @@ public class SelectorEngine implements HasSelector {
     }\r
   }\r
   \r
+  public native boolean contains(Element a, Element b) /*-{\r
+    return a.contains ? a != b && a.contains(b) : !!(a.compareDocumentPosition(b) & 16)\r
+  }-*/;\r
+  \r
   public void setRoot(Node root) {\r
     assert root != null;\r
     this.root = root;\r
index b7632fd3ee779a3207deae33c6c5931a97170a01..b7cd195c50dcfb6934adbf5bf90016851aac737f 100644 (file)
@@ -1744,5 +1744,26 @@ public class GQueryCoreTest extends GWTTestCase {
     test.addClass("test");
     test.removeClass("test");
   }
+  
+  public void testHas() {
+    $(e).html("<ul>"
+              +"<li>list item 1</li>"
+              +"<li id='l2'>list item 2"
+              +" <ul>"
+              +"  <li>list item 2-a</li>"
+              +"  <li>list item 2-b</li>"
+              +" </ul>"
+              +"</li>"
+              +"<li id='l3'>list item 3 <span>span</span>" 
+              +"</li>"
+              +"<li>list item 4</li>"
+              +"</ul>");
+    assertEquals("", $("#l2").css("background-color"));
+    $("li", e).has("ul").css("background-color", "red");
+    assertEquals("red", $("#l2").css("background-color"));
+
+    Element span = $("span", e).get(0);
+    assertEquals("l3", $("li", e).has(span).id());
+  }
 
 }