The Un-Official Proxomitron Forum
Adding contains method to mozilla - Printable Version

+- The Un-Official Proxomitron Forum (https://www.prxbx.com/forums)
+-- Forum: Proxomitron Filters (/forumdisplay.php?fid=38)
+--- Forum: FIP (/forumdisplay.php?fid=36)
+--- Thread: Adding contains method to mozilla (/showthread.php?tid=778)



Adding contains method to mozilla - z12 - Apr. 10, 2006 12:01 AM

Here's the code I'm trying out:

Code:
// create a contains method for gecko to check if one node is contained in another
// based on http://www.quirksmode.org/blog/archives/2006/01/contains_for_mo.html
// ie & opera have a contains method

function prxContainsCheck(){
  var n=document.documentElement;
  if(typeof(n.contains)=='undefined' && typeof(n.compareDocumentPosition!='undefined')){
    try{
      Node.prototype.contains=function(arg){return !!(this.compareDocumentPosition(arg) & 16)};
    }catch (e){
      alert("create contains method failed");
    }
  }
  // alert(typeof(n.contains));
  // alert(typeof(n.contains(n.firstChild)));
  // alert(n.contains(n.firstChild));
}

prxContainsCheck();

It seems that this would be more efficient than looping or bubbling up through the document, ala BrainJar.

Mike


- z12 - Apr. 21, 2006 09:45 AM

Heres the latest version I'm using:

Code:
//-----------------------------------

// create a contains method for mozilla to check if one node is contained in another
// based on http://www.quirksmode.org/blog/archives/2006/01/contains_for_mo.html
// ie & opera have a contains method
// added isSameNode check to make it work like ie & opera

function prxContainsCheck(){
  var n=document.documentElement;
  if(typeof(n.contains)=='undefined' && typeof(n.compareDocumentPosition!='undefined')){
    try{
      Node.prototype.contains=function(arg){return !!(this.compareDocumentPosition(arg) & 16 || this.isSameNode(arg))};
    }catch (e){
      alert("create contains method failed");
    }
  }
}

prxContainsCheck();


//-----------------------------------

IE & Opera return true when a node is compared to itself, so I added the isSameNode check.

This function has turned out to be quite handy.

Mike