Lynx Posted March 9, 2008 Report Share Posted March 9, 2008 Tātad parastais cloneNode manā gadijumā ir par vāju, jo nepieciešams nokopēt arī visus eventus un properitijus, kas mākslīgi pievienoti elementam. Šis ir mans variants cik nu tālu esmu ticis un te arī iesprūdu(sīkāki komentāri kodā): function copyNode(ele, id) { var copy = ele.cloneNode(true); for(var item in ele) { copy.item = ele[item]; // Bez effekta, nav kludu, bet nav arī rezultāta //copy[item] = ele[item]; // Izmet kļūdu: setting a property that has only a getter } if(id) { copy.id = id; } return copy; } Cik saprotu, man ir jāatrod kāds veids, kā atsijāt tas vertības, kuras nevar pielikt, bet pašlaik nav ideju kā to izdarīt. Ar typeof nesanāca atrast isto variantu. Link to comment Share on other sites More sharing options...
bubu Posted March 9, 2008 Report Share Posted March 9, 2008 Var jau dumi ignorēt exceptionus: try { copy[item] = ele[item]; } catch (e) {} Link to comment Share on other sites More sharing options...
Lynx Posted March 9, 2008 Author Report Share Posted March 9, 2008 Hmm šis variants strādā. Tikai nepieciešams vēl viens uzlabojums: japārkopē arī visi eventi, kas pievienoti ar addEventListener. Pētiju internetā itkā uzgāju ka Mootools ir funkcija cloneEvents, bet tas viss pa sarezģītu manai saprašanai. Cik noprotu, laikam references uz visiem eventiem tiek glabātas atsevišķā objektā, no kurienes arī priekš kopijas tiek paņemti dati. Jo uz paša elementa nav nekur minēts par šiem eventiem. Un lai visu sistēmu pārtaisītu uz šādu variantu, diezgan daudz darba. Japameklē vēl informācija. Link to comment Share on other sites More sharing options...
bubu Posted March 9, 2008 Report Share Posted March 9, 2008 Šķiet, ka tas ir vienīgais veids - saglabāt to eventu handleru sarakstu atseivšķā atribūtā kautvai tam pašam elementam, kuram to handleri liec virsū un pie klonēšanas piešķirt handlerus no šī saraksta jaunās nodes eventiem. Tik neaizmirsti izvākt ārā handleri no sarakasta, ja tas arī tiek ņemts nost no eventa. Link to comment Share on other sites More sharing options...
Recommended Posts