I've stumbled onto the case in which we want to perform a selector
find on an element with a period in its id:
and the result is null, since Selector.findElements alters the
selector for the selector API by inserting
# and the id into the selector, resulting in the new selector:
'#my_mail_google.com img'
which of course looks for an img element under an element with id
'my_mail_google' and class 'com'.

In short, findElements is missing an escaping for the id. Here's a
revised code:
  findElements: function(root) {
    root = root || document;
    var e = this.expression, results;

    switch (this.mode) {
      case 'selectorsAPI':
        // querySelectorAll queries document-wide, then filters to
        // of the context element. That's not what we want.
        // Add an explicit context to the selector if necessary.
        if (root !== document) {
          var oldId = root.id, id = $(root).identify();
          e = "#" + id.replace(/\./, '\\.') + " " + e;

        results = $A(root.querySelectorAll(e)).map(Element.extend);
        root.id = oldId;

        return results;
      case 'xpath':
        return document._getElementsByXPath(this.xpath, root);
       return this.matcher(root);

You received this message because you are subscribed to the Google Groups 
"Prototype: Core" group.
To post to this group, send email to prototype-core@googlegroups.com
To unsubscribe from this group, send email to 
For more options, visit this group at 

Reply via email to