diff --git a/Source/Element/Element.js b/Source/Element/Element.js index 16b7bb374..f50b3e04e 100644 --- a/Source/Element/Element.js +++ b/Source/Element/Element.js @@ -818,7 +818,26 @@ Element.implement({ clone: function(contents, keepid){ contents = contents !== false; - var clone = this.cloneNode(contents), ce = [clone], te = [this], i; + var cloneNode = function(){return false}; + /**/ + if (Browser.ie6 || Browser.ie7){ + var self = this; + cloneNode = function(contents){ + var oldID = '' + self.id; + self.removeAttribute('id'); + var clonedHTML = self.outerHTML; + var cloned = document.createElement('div'); + if(!keepid) clonedHTML = clonedHTML.replace(/id=[^\ \>]/gim,''); + cloned.innerHTML = clonedHTML; + self.id = oldID; + var clone = cloned.firstChild; + if (keepid) clone.id = oldID; + if (!contents & clone.tagName !== 'INPUT' ) clone.innerHTML = ''; + return clone; + } + } + /**/ + var clone = cloneNode(contents) || this.cloneNode(contents), ce = [clone], te = [this], i; if (contents){ ce.append(Array.from(clone.getElementsByTagName('*'))); @@ -849,6 +868,8 @@ Element.implement({ for (i = co.length; i--;) co[i].outerHTML = to[i].outerHTML; } /**/ + + return document.id(clone); } diff --git a/Specs/1.4client/Element/Element.js b/Specs/1.4client/Element/Element.js index e89ea38df..c51a84c43 100644 --- a/Specs/1.4client/Element/Element.js +++ b/Specs/1.4client/Element/Element.js @@ -10,6 +10,34 @@ describe('Element', function(){ describe('Element.getProperty', function(){ + it('should cloneNode properly on IE6/7', function(){ + + var div = new Element('div'); + div.inject(document.documentElement); + div.innerHTML = ""; + + var q1 = document.id('Q1'); + var clone = q1.clone(); + clone.replaces(q1); + + expect($$('input[id=Q1]').length).toEqual(0); + expect($$('input#Q1').length).toEqual(0); + expect($$('input[id=Q1]').length).toEqual(0); //<- element.erase will fail on this :( + clone.dispose(); + + var ul = new Element('ul',{id:'test'}); + ul.set('html', '
  • '); + ul.inject(document.documentElement); + + var ulc = ul.clone(); + ulc.replaces(ul); + + expect($$('li#li1').length).toEqual(0); + + ulc.destroy(); + + }); + it('should get the attrubte of a form when the form has an input with as ID the attribute name', function(){ var div = new Element('div'); div.innerHTML = '
    ';