Autor Zpráva
RaĎim
Profil *
Zdravím,
potřeboval bych řekněme z <ul> udělat <div>. Samozřejmě se zachováním obsahu a kdyby to bylo možné, tak se zachováním atributů.

Vlastnosti .nodeName, .tagName a .localName přepsat nejdou. Pokoušel jsem se to udělat stylem, že vytvořím nový <div>, ze starého <ul> vezmu obsah a vložim ho do nového <div>u a novým <div>em pak nahradím starý <ul>, ale bez úspěchu. Možná je to mou neznalostí javascriptu... Nějak se mi nepodařilo dát obsah <ul> do nového <div>u.
Leo
Profil
appendChild by melo stacit, Leo
RaĎim
Profil *

function old_ul2new_div(){
var old_ul=document.getElementsByTagName('ul')[0];
var new_div=document.createElement('div');
new_div.className=old_ul.className;
for(var i=0;i<old_ul.childNodes.length;i++){
new_div.appendChild(old_ul.childNodes[i]);
}
old_ul.parentNode.appendChild(new_div);
old_ul.parentNode.removeChild(old_ul);
}

...nepeče to. Nový <div> sice je, ale bez obsahu.
RaĎim
Profil *
Tak už jsem si na to přišel, ale MSIE to stejně nezvládne, takže je mi to na nic, protože jsem to dělal právě kvůli němu.
Já nevím jak vy, ale já mám s MSIE zkušenost, že strašně blbě rozchází, když se seznamama (ul, li) děláte pomocí CSS něco většího. Takže jsem dospěl k tomu, že je nejlepší seznamy vůbec nepoužívat. Ale to pak už není ono a zdroják není tak čistej. Na seznamy prostě musí být ul, ol, li...
Tak mě napadla taková sranda. Udělal jsem si dva stejné seznamy, jenom jeden byl napsaný pomocí ul a li a druhý jenom pomocí divů. Oba jsem naformátoval přes CSS stejně (nepoužíval jsem li.třída-li a ul.třida-ul, ale jenom .třída-li a .třída-ul, aby to bylo použitelné jak na ul/li tak na div). Oba dva seznamy se ve FF a v Opeře zobrazili stejně. Jenom v MSIE se ten divový zobrazil dobře, ale ten li/ul špatně.
Finta měla spočívat v tom, že ve zdrojáku by byly seznamy (ul/li), takže by byl jak má být, ale potom by se pomocí javascriptu všechny seznamy předělali na divy a tím pádem by v MSIE byly dobře naformátované.
Konečně se mi ten javascript povedlo naprogramovat, otestoval jsem ho ve FF a dělá to co má, jenom potom, když ho zapnu v MSIE, tak to vypadá, jakoby se to udělalo taky zprávně, jenom MSIE už po předělání li/ul na divy nepoužije nové formátování CSS ale to původní. Fakt nechápu....

var old_ul;
while(old_ul=document.getElementsByTagName('ul')[0]){
var new_div=document.createElement('div');
new_div.className=old_ul.className;
new_div.style.border='1px solid black';
var old_ul_children_length=old_ul.childNodes.length;
for(var i=0;i<old_ul_children_length;i++){
new_div.appendChild(old_ul.childNodes[0]);
}
old_ul.parentNode.replaceChild(new_div,old_ul);
}
var old_li;
while(old_li=document.getElementsByTagName('li')[0]){
var new_div=document.createElement('div');
new_div.className=old_li.className;
var old_li_children_length=old_li.childNodes.length;
for(var i=0;i<old_li_children_length;i++){
new_div.appendChild(old_li.childNodes[0]);
}
old_li.parentNode.replaceChild(new_div,old_li);
}
Plaváček
Profil
RaĎim


Tak nevím, nebylo by jednodušší se prostě naučit správně seznamy formátovat pomocí CSS? Já s nimi nikdy problém neměl, alespoň ne žádný, který by nešel snadno vyřešit. Takové opičky, co vymýšlíš, jsou, dovol mi to slovo, absolutně naprd.
krteczek
Profil
RaĎim: to co řešíš (rozhozený stylovaný seznam v ie) se stratí když nastavíš li{width:požadovaná šířka}
krteczek
RaĎim
Profil *
Plaváček: Hej, já umím správně formátovat seznamy v CSS. To dokazuje už to, že to v pohodě funguje ve FF a Opeře. Zase jenom MSIE dělá něco špatně. Možná že ty si s tím nikdy problémy neměl, ale zkoušel si udělat menu se stromovou strukturou? UL vložený do jiného UL? A k tomu ještě aby to mělo po levé straně takové ty čáry, co tu stromovou strukturu znázorňují? Navíc musí být vše dynamické, protože struktura menu je uložená v db a pořád se mění? Asi ne. A jestli jo a fungovalo ti to v MSIE, tak to seš potom fakt dobrej... to je jiná.
krteczek: Jak už jsem psal víš, tak vše je dynamické a protože je to stromová struktura, tedy UL v jiném UL, tak výsledné šířky LI jsou různé a nemůžu je předem vědět. Jedině že bych šířku generoval už na serveru a přidával bych jí rovnou do každého LI jako atribut style. Ale to snad ne... navíc když počítám, že časem udělám víc designů (pouze změna souboru s CSS) a tam může menu vypadat jinak.
Plaváček
Profil
RaĎim

A jestli jo a fungovalo ti to v MSIE, tak to seš potom fakt dobrej...

Dělal. Fungovalo. Jo, asi jsem dobrej.


Jedině že bych šířku generoval už na serveru

Nesmysl. Pro IE postačí nastavit (nejlépe v separátním stylu) pro LI a A width: 100%. Jediný element, kterému je tedy nutné nastavit šířku, a to musíš tak jako tak, je UL (a všechny UL uvnitř). V CSS celkem hračka.
RaĎim
Profil *
Protože už je to trochu o něčem jiném než JS, dovolil jsem pokračovat nově.
Toto téma je uzamčeno. Odpověď nelze zaslat.