22. august 2005 - 23:21Der er
8 kommentarer og 2 løsninger
Et IE/FF DOM problem
Har lavet denne funktion:
<script language="javascript"> function instant_edit_list(elm, something) { var elm_array = elm.parentNode.getElementsByTagName('td');//Array of elements tagged td inside parentNode
for (i = 0; i < elm_array.length; i++) { var current_value = elm_array.item(i).innerHTML; elm_array.item(i).innerHTML = ''; var input = document.createElement('input'); input.setAttribute('type','text'); input.setAttribute('value',current_value); input.setAttribute('class','input');/*Mozilla gets this*/ input.setAttribute('className','input');/*IE gets this*/ elm_array.item(i).appendChild(input); input.focus(); } } </script>
Kan nogen fortælle mig hvorfor det overhovedet ikke virker i IE, mens det i FF virker, bortset fra at hvis der er flere 'table' elementer, bliver alle 'td' til inputs.
Nogle eksperter her på sitet er blevet hørt sige ting som at man lægger op til øretæver hvis man placerer tags i en table men undenfor td-elementerne. Jeg vil umiddelbart tro at det kan have noget med det at gøre.
Du kan evt. lægge en div omkring tabellen og så rykke din <h2> og <a>-tags udenfor tabellen men stadig inde i div-tag'et. Mon så ikke din funktion så stadig ville fungere...
Sikkert fordi de eneste slags elementer, der kan være children til en table er tbody, thead og tfoot-elementer, som så kun kan indeholde tr-elementer, som kun kan indeholde th og td-elementer ...
-- så dine hx-tags og a-tags er simpelthen ulovligt nestet ...
Du kan prøve denne, den virker umiddelbart i alle mine browsere:
<script language="javascript"> function instant_edit_list(elm, something) { var par = elm; while(par.tagName.toLowerCase() != "table") par = par.parentNode; var elm_array = par.getElementsByTagName('td');//Array of elements tagged td inside parentNode
for (i = 0; elm_array.length > i; i++) { var current_value = elm_array[i].innerHTML; elm_array[i].innerHTML = ''; var newInp = document.createElement('input'); newInp.setAttribute('type','text'); newInp.setAttribute('value',current_value); newInp.setAttribute('class','input');/*Mozilla gets this*/ newInp.setAttribute('className','input');/*IE gets this*/ elm_array[i].appendChild(newInp); newInp.focus(); } } </script>
Jeg skulle lige til at sige at flg. fungerer i både IE 6.0 og FF:
<html> <head> <title></title> <script language="javascript"> function instant_edit_list(elm, something) { var elm_array = elm.parentNode.getElementsByTagName('td');//Array of elements tagged td inside parentNode
for (i = 0; i < elm_array.length; i++) { var current_value = elm_array.item(i).innerHTML; elm_array.item(i).innerHTML = ''; var input = document.createElement('input'); input.setAttribute('type','text'); input.setAttribute('value',current_value); input.setAttribute('class','input');/*Mozilla gets this*/ input.setAttribute('className','input');/*IE gets this*/ elm_array.item(i).appendChild(input); input.focus(); } } </script>
<script type="text/javascript"> function instant_edit_list(elm, something) { var par = elm; while(par.tagName.toLowerCase() != "table") par = par.parentNode; var elm_array = par.getElementsByTagName('td');//Array of elements tagged td inside parentNode
for (i = 0; elm_array.length > i; i++) { var current_value = elm_array[i].innerHTML; elm_array[i].innerHTML = ''; var newInp = document.createElement('input'); newInp.type = 'text'; newInp.value = current_value; newInp.className = 'input'; elm_array[i].appendChild(newInp); newInp.focus(); } } </script>
Arhh, smukt - Jamen jeg må lige give mig selv en over næsen for det med ulovligt nestede elementer. Det burde jeg vel efterhånden kunne have sagt mig selv.
Jeg syntes at i begge bidrager til svaret, hvorfor det nok er mest rimeligt at i deler point - Smid begge et svar!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.