2017-03-10 3 views
0

In der #content div, gibt es Blöcke, die Benutzer sie ziehen und sortieren können. Jeder Block kann viele Knoten enthalten. Unter jedem Block befindet sich das Element are, das das Attribut "data-node-id" enthält. Ich möchte eine Funktion erstellen, die die Reihenfolge nach dem Ziehen-Sortieren erhalten wird. Diese Funktion kann über einen Klick-Button ausgeführt werden (muss nicht bei jeder Änderung der Sortierung ausgeführt werden).Erhalten Sie alle Datenattribute Reihenfolge der HTML-Elemente

Hier ist meine Seite: http://orbitcoins.website/demos/demo%20-%20json_nodes_diagram/nodes_diagram_serverfile.php

Lassen Sie uns also sagen, ich habe Elemente in dieser Reihenfolge:

order = {1,2,3,4,5}//block1:{1}, block2:{2}, block3:{3,4,5} 

nach der Bestellung des zweiten und dritten Block zu ändern, wenn diese Funktion ausgeführt wird, wir wird dieses Ergebnis erhalten:

new_order = {1,3,4,5,2}//block1:{1}, block2:{3,4,5}, block3:{2} 

Es gibt keinen Unterschied bei der Verwendung von JQuery oder JavaScript.

+0

Verwenden 'JavaScript PHP jquery html css' und haben einen Versuch. – JustOnUnderMillions

+0

was genau willst du? Frage ist unklar. –

+1

** Bitte fügen Sie eine klare Problemstellung und eine [mcve]. ** (Auch, Objekte in JS haben keine Reihenfolge. Stattdessen verwenden Sie eine [Array] (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array) 'order = [0,1,2,3]') – evolutionxbox

Antwort

0

Nun hat @Andreas die Lösung in dem Kommentar geschrieben:

$("[data-node-id]").map(function() { return +this.getAttribute("data-node-id"); }).get() 

Diese Lösung scheint mich perfekt! es macht genau das, was ich wollte.

Kredit geht zu @Andreas.

+0

ES6: 'Array.from (document.querySelectorAll (" [Daten-Knoten-ID] ")). Map (n => + n.getAttribute (" Daten-Knoten-ID "));' – Andreas

+0

ES5: 'var elements = document.getElementsByClassName ("Panel-Erfolg"); Funktion getOrder() {var order = []; für (var i = 0; i Andreas

+0

tatsächlich, ich brauche nur die" 'data-node-id'" nicht das gesamte Element. Ihre erste Lösung scheint genau das zu sein, was ich brauche. also werde ich deine erste lösung behalten. –

0

Mit diesem Code-Schnipsel können Sie alle Blöcke in der Reihenfolge prüfen Sie am Ende der Ausführung der enthaltenen Werte definiert und erhalten:

// all the blocks you have 
    $blocks = array(1, 2, 3); 

    // all the elements they contain 
    $blocks[1] = array(1); 
    $blocks[2] = array(2); 
    $blocks[3] = array(345); 

    // the new block order you will get 
    $new_order = array(1, 3, 2); 

    // initialize the new blocks order 
    $new_blocks = array(); 

    // for every block of the new order 
    foreach ($new_order as $block) { 

     // add to the new blocks order the content of that block 
     array_push($new_blocks, $blocks[$block]); 

    } 

    // for each new block obtained 
    foreach ($new_blocks as $block) { 

     // and for every node inside 
     foreach ($block as $item) { 

      // print it out 
      var_dump($item); 

     } 

    } 

    // new_blocks is the structure you are searching for 
+0

Vielen Dank für Ihre Antwort, aber @Andreas verwendet eine Karte und es gibt, was ich brauche, in einem einfachen Code und ich brauche nicht auf Blöcke zu loopen. –

Verwandte Themen