Autor Zpráva
tester
Profil *
Tento kód by měl prohodit dva sloupce na stránce:
Jak psát web
(Kód injectuju na stránku pomocí addonu pro prohlížeč Firefox)

    var selectors = "div#navigace;div#text"
    selectors.split(";");
        var searches = [];
        var targets = [];
        for ( var k in selectors )
          {
          if ( (k % 2) != 0 )
            searches.push(selectors[k]);
          else
            targets.push(selectors[k]);      
          }
        
        for ( var k in searches )
          {
          var cloned = $(searches[k]).clone(true);
          $(searches[k]).replaceWith($(targets[k]));
          $(targets[k]).replaceWith(cloned);
          }

No nepovedlo se. Levý sloupec zmizel a pravý je na místě. Co je špatně?
Joker
Profil
tester:
Jednak se na druhém řádku volá selectors.split, ale výsledek se nikam neukládá a nadále se pracuje s původním selectors.

Ten výsledek je pak způsobený použitím for-in.

V proměnné selectors je řetězec "div#navigace;div#text", takže výsledkem toho for-in by mělo být:

searches = ["i", "#", "a", "i", "a", "e", "d", "v", "t", "x"]
targets = ["d", "v", "n", "v", "g", "c", ";", "i", "#", "e", "t"]

Podle mě z toho reálně něco udělá (když vynechám položky s "#" a ";", které by měly generovat chyby) jen třetí iterace, která má prohodit všechny výskyty selektoru "a" a všechny výskyty selektoru "n".
To nejspíš ve výsledku odstraní všechny odkazy ze stránky (vzhledem k tomu, že tam žádný prvek <n> není), což je možná příčinou dojmu, že zmizela ta navigace.
tester
Profil *
Tak oprava a posílám živou ukázku
tester
Profil *
Nefunguje. Ještě jsem to zkusil pomocí CSS, ale to vypadá dost blbě:

    var searches = [];
    var targets = [];
    for ( var k in selectors )
      {
      if ( (k % 2) == 0 )
        searches.push(selectors[k]);
      else
        targets.push(selectors[k]);      
      }
    
    for ( var k in searches )
      {
      var search = $(searches[k]);
      var target = $(targets[k]);
      var offset_search = search.offset();
      var offset_target = search.offset();
      search.css({
           'position' : 'absolute',
           'left' : offset_search.left + 'px',
           'top' : offset_search.top + 'px'
      });
      target.css({
           'position' : 'absolute',
           'left' : offset_target.left + 'px',
           'top' : offset_target.top + 'px'
      });
      }



Je tam obrovská mezera zleva






Podle všeho ta navigace má špatně nastavenou pozici.


Při normálním zobrazení pro div#text mi debugger ukazuje offset_target.left = 638 až 1200 podle toho jak velký dám zoom. To teda nechápu. Hodnotu bych očekával blízko 0.
Joker
Profil
tester:
A co je vlastně cílem?

Prohodit prvky vizuálně na stránce jejich prohozením v HTML půjde jen ve specifických případech, protože s tím musí počítat i stylování těch prvků, jinak se rozhodí stránka.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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