Autor Zpráva
quatzael
Profil
Jak lze prosím v PHP efektivně udělat seřazení elementů podle hodnot k nim vztahujících se proměnných od nejnižší po nejvyšší , jestliže každý element je definován v samostatném souboru pomocí include..??

Mělo by to být asi takto:

Proměnné:

$a = 7;
$b = 5;
$c = 2;
$d = 9;

A podle toho by pak mělo být pořadí příkazů následovné:

include file_c.php;
include file_b.php;
include file_a.php;
include file_d.php;

A v JS bych potřeboval přeskupit již zobrazené elementy:

<div id="a"></div>
<div id="b"></div>
<div id="c"></div>
<div id="d"></div>

v JS by bylo např.:

var a = 7;
var b = 5;
var c = 2;
var d = 9;

takže by se ty elementy přemístily do následujícího pořadí:

<div id="c"></div>
<div id="b"></div>
<div id="a"></div>
<div id="d"></div>

Je to na to nějaké jednoduché řešení??

Předem díky!!
ShiraNai7
Profil
Celé řešení ti nenapíšu, ale určitě si to dej vše do polí. Jednotlivé proměnné se špatně řadí.
quatzael
Profil
Ok, v tom JavaScriptu ale potřebuju ty již umístěné elementy přeházet i s jejich aktuálním obsahem, takže ten jejich obsah musím tedy nejdřív nějak uložit, pak je smazat a nakonec je po seřazení znovu zobrazit..

Zkusím to teda nějak vymyslet..


Pomocí pole chápu, ale spíš mi jde o to jak pomocí seřaní jednoho pole (s proměnnými) seřadím pole jiné (s názvy include souborů nebo id elementů)..


Už možná vím..
Chamurappi
Profil
Reaguji na quatzaela:
Metoda sort na polích dostává jako argument porovnávací funkci. Můžeš tedy řadit pole naplněné strukturami, v nichž bude jedna složka element a druhá složka číslo, při čemž porovnávací funkce bude porovnávat jen to číslo. Seřazené pole si pak projdeš a jednotlivé elementy naskládáš na původní místo appendChildem…
quatzael
Profil
Chamurappi:
no tak to PHPčko jsem zvládl celkem hravě, ale s tím javascriptem je to horší.. funkci .sort() celkem chápu, ale moc nevím jak ty elementy fakticky přemístit..
quatzael
Profil
Tak já jsem něco našel, trochu jsem to upravil, ale bohužel to nefunguje..
http://jsfiddle.net/8W6AU/13/
Chamurappi
Profil
Reaguji na quatzaela:
V tom Fiddlu máš celý JS v MooToolsím onloadu, takže ti konzole oprávněně křičí, že neexistuje globální funkce myFunction.
Ale stejně je ten skript polofunkční zmetek, nefungoval by ve všech prohlížečích.
quatzael
Profil
Chamurappi:
nerozumín termínu MooToolsí onload..
existuje tedy nějaké řešení, které funguje bez prolému ve všech prohlížečích??
Chamurappi
Profil
Reaguji na quatzaela:
nerozumín termínu MooToolsí onload..
Vlevo v nastavení Fiddlu máš vybráno, že uvedený JS používá Mootools a že se má volat v onload.

existuje tedy nějaké řešení, které funguje bez prolému ve všech prohlížečích??
Ano. Princip jsem ti popsal ve [#4]. Kompletní řešení ti nenapíšu, mimo jiné i proto, že jsi neuvedl moc konkrétní zadání, a není mi tedy jasné, co a proč a k čemu vlastně chceš.
quatzael
Profil
Chamurappi:
no v podstatě potřebuju podobný princip jako je v tý ukázce (tady už fungující) http://jsfiddle.net/8W6AU/15/

až na to, že ty hodnoty, podle kterých to potřebuju seřadit budu mít v atributech data-..

jestli Tě opravdu zajímá skutečnej "důvod proč" to chci, tak Ti můžu ukázat živou ukázku, ale jenom pokud mi napíšeš svoji mail adresua já Ti pak pošlu odkaz přímo na email a případně bys mi mohl prosím pomoci i s jiným problémem kterej uvádím i s adresou zde: Na zobrazení jednoho div "reaugují" v IE jiné divy

Možná, že je to banalita, ale já tomu CSS v IE opravdu nerozumím.. Chová se to totiž naprosto nevyzpytatelně..
quatzael
Profil
Tak tady dávám řešení:

PHP:
$items = array("item-a.php" => "8", "item-b.php" => "2", "item-c.php" => "6");
 asort($items);
 foreach ($vas $key => $val)
 {
 //echo "$key = $val\n";
 include $key;
 }

JS:
http://jsfiddle.net/RZ2K4/3/
Chamurappi
Profil
Reaguji na quatzaela:
Metoda getElementsByClassName nefunguje ve všech prohlížečích. Metoda forEach na polích také ne.
quatzael
Profil
Chamurappi:


Na kterých to nefunguje?? já jsem zkoušel kromě Safari všechny ostatní (IE, Mozzilu, Chrome, Operu) a bylo to bez problému. Myslíš starší verze?
čím se to dá teda nahradit, aby to fungovalo všude??
Chamurappi
Profil
Reaguji na quatzaela:
Myslíš starší verze?
Ano. Ty snad ladíš stránky jen pro nejnovější verze prohlížečů? To je hloupé.

čím se to dá teda nahradit, aby to fungovalo všude??
Pole můžeš procházet cyklem a elementy hledat podle jiného společného znaku, než je třída.
_es
Profil
quatzael:
čím se to dá teda nahradit, aby to fungovalo všude??
Tak, že tie elementy získaš nejako inak, napríklad:
ObaľujúciElement.getElementsByTagName("DIV")
quatzael
Profil
teď jsem to chtěl aplikovat přímo do mýho webu, ale křičí mi to:
Chyba: DOM Exception: NOT_FOUND_ERR (8)

u řádku s příkazem:
document.body.insertBefore(el, br);


Proč prosím například nefunguje tohle?? http://jsfiddle.net/quatzael/RZ2K4/5/


mám tam jen <span> místo <br> a je z nějakých nepochopitelných důvodů problém..


aha, tak to nefunguje asi jenom v IE, ale v ostatních prohlížečích ten button háže nahoru..


nebo ještě poupravený o obal tohle: http://jsfiddle.net/quatzael/RZ2K4/7/
quatzael
Profil
Tak už jsem to asi vyřešil.. http://jsfiddle.net/quatzael/RZ2K4/15/

Je to takhle v pořádku??


No ale v reálu (v mojí aplikaci) mi to ty jednotlivý divy totálně rozmontuje.. já tam mám složitou vnitřní strukturu, kterou potřebuju aby zůstala..


Celou vnitřní strukturu mi to rozebralo a vypsalo všechny elementy za sebou pod sebe..


Tady to jde vidět, že to nezůstane pohromadě.. http://jsfiddle.net/quatzael/RZ2K4/17/

To bude asi tím .getElementsByTagName(), určitě to bere i ty vnitřní elementy...


Tak jsem si to v mý aplikaci poupravil zase zpátky na to s tím .getElementsByClassName() a funguje to bez problému..
_es
Profil
quatzael:
Máš tam:
    var classname = wrap.getElementsByTagName("div");
    var classname = document.getElementsByClassName('item');
Aký to má zmysel?

Celou vnitřní strukturu mi to rozebralo a vypsalo všechny elementy za sebou pod sebe..
No tak to sprav tak, aby sa to „nerozobralo“ - premiestňovanie elementov už predsa vieš.

Ignoruješ rady v [#12].
quatzael
Profil
_es:
Mělo tam být jenom:
var classname = wrap.getElementsByClassName('item');

Ale výsledek je nakonec stejnej..

a jak to mám teda udělat s tím .getElementsByTagName("div");??

já tam mám v každým tom elementu s class="item" složitou strukturu se stovky dalších divů, to přece nemůžu všechno nějak složitě přemísťovat...
_es
Profil
quatzael:
já tam mám v každým tom elementu s class="item" složitou strukturu se stovky dalších divů
No ale my nevieme, čo tam máš, lebo si to neukázal.

to přece nemůžu všechno nějak složitě přemísťovat...
Ako „zložito“? Tak, ako premiestniš jeden div obsahujúci len text, rovnako premiestniš aj div obsahujúci niečo zložitejšie.
quatzael
Profil
_es:
Ako ‚zložito‘? Tak, ako premiestniš jeden div obsahujúci len text, rovnako premiestniš aj div obsahujúci niečo zložitejšie.
To jo, ale jak to mám teda vyřešit bez toho .getElementsByClassName() a forEach, aby se ta vnitřní struktura zachovala??
_es
Profil
quatzael:
bez toho .getElementsByClassName()
No získaš ich nejako inak, trebárs pomocou rady v [#15].

a forEach
Trebárs pomocou príkazu for.
quatzael
Profil
_es:
No získaš ich nejako inak, trebárs pomocou rady v [#15].
ale to se mi zase celá ta struktura rozsype, protože ta funkce .getElementsByTagName("div") vybírá všechny divy (i ty zevnitř) takže je seřadí a vypíše jeden za druhým a ta původní struktura se už nezachová..
_es
Profil
quatzael:
protože ta funkce .getElementsByTagName("div") vybírá všechny divy (i ty zevnitř)
No tak to sprav nejako inak, snáď trochu logicky myslieť vieš. Sú aj DOM metódy na prechádzanie v štruktúre DOM. Alebo použi značku <P> a máš to vyriešené jednoduchšie.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: