2016-10-21 4 views
1

HTMLErstellen Sie ein JavaScript-Objekt aus HTML-Code

<div id="html"> 
    <ul> 
    <li id="myFolder" type="folder">myFolder 
     <ul> 
     <li id="myFolder/fonts" class="empty" type="folder">fonts</li> 
     <li id="myFolder/index.html" type="file">index.html</li> 
     <li id="myFolder/js" type="folder">js 
      <ul> 
      <li id="myFolder/js/controllers" type="folder">controllers 
       <ul> 
       <li id="myFolder/js/controllers/core" type="folder">core 
        <ul> 
        <li id="myFolder/tempjs/controllerslates/core/menu.js" type="file">menu.js</li> 
        </ul> 
       </li> 
       <li id="myFolder/js/controllers/errors" type="folder">errors 
        <ul> 
        <li id="myFolder/js/controllers/errors/error.js" type="file">error.js</li> 
        </ul> 
       </li> 
       </ul> 
      </li> 
      </ul> 
     </li> 
     </ul> 
    </li> 
    </ul> 
</div> 

Ich mag würde den HTML-Code in mehrere Objekte wie folgt zu transformieren:

{ 
    "dir": "", 
    "name": "myFolder", 
    "type": "folder", 
    "children": [{ 
     "dir": "myFolder", 
     "name": "fonts", 
     "type": "folder" 
    }, { 
     "dir": "myFolder", 
     "name": "index.html", 
     "type": "file" 
    }, { 
     "dir": "myFolder", 
     "name": "js", 
     "type": "folder", 
     "children": [{ 
      "dir": "myFolder/js", 
      "name": "controllers", 
      "type": "folder", 
      "children": [{ 
       "dir": "myFolder/js/controllers", 
       "name": "core", 
       "type": "folder", 
       "children": [{ 
        "dir": "myFolder/tempjs/controllerslates/core", 
        "name": "menu.js", 
        "type": "file" 
       }] 
      }, { 
       "dir": "myFolder/js/controllers", 
       "name": "errors", 
       "type": "folder", 
       "children": [{ 
        "dir": "myFolder/js/controllers/errors", 
        "name": "error.js", 
        "type": "file" 
       }] 
      }] 
     }] 
    }] 
} 

Ich weiß nicht, wie die Transformation zu tun . Ich glaube, ich

document.getElementsByTagName('li');

oder ähnliches verwenden können. Aber wie kann ich Eltern- und Kinder-Links verwalten und wie kann ich Variablen von Objekten mit HTML-Attributen verknüpfen?

+2

Haben Sie JSON bedeuten? –

+1

Hast du tatsächlich schon etwas probiert? Sie scheinen derzeit eine gewünschte Eingabe und Ausgabe zu geben, dann fordern Sie an, dass die eigentliche Arbeit für Sie erledigt ist. – DBS

+0

Ja, ich habe meinen Beitrag nicht bestanden. Zuallererst muss ich meinen HTML in JS-Objekt und nachher in JSON konvertieren, aber die Umwandlung von JS-Objekt in JSON ist kein Problem für mich, es ist die erste Umwandlung das Problem ^^. – Barilo

Antwort

0

Dies ist das nächste, was ich bekommen konnte. Genießen.

var getIdBasedStructure = function(ulContainer) { 
 
    var output = []; 
 
    Array.prototype.forEach.call(ulContainer.children, function(el) { 
 
    if (el.nodeName == "LI") { 
 
     var ret = getIdSplits(el.id, el.type); 
 
     if (el.querySelectorAll("ul").length > 0) { 
 
     output.push({ 
 
      dir: ret[0], 
 
      name: ret[1], 
 
      type: ret[2], 
 
      children: getIdBasedStructure(el.querySelectorAll("ul")[0]) 
 
     }); 
 
     } else { 
 
     output.push({ 
 
      dir: ret[0], 
 
      name: ret[1], 
 
      type: ret[2] 
 
     }); 
 
     } 
 
    } 
 
    }); 
 
    return output; 
 
}; 
 

 
var getIdSplits = function(id, type) { 
 
    var split = id.split("/"); 
 
    var ret = []; 
 
    if (split.length > 3) { 
 
    ret[2] = split[split.length - 1]; 
 
    ret[1] = split.slice(0, split.length - 1).join("/"); 
 
    ret[0] = type; 
 
    } else { 
 
    ret[0] = split[0] ? split[0] : null; 
 
    ret[1] = split[1] ? split[1] : null; 
 
    ret[2] = type; 
 
    } 
 
    return ret; 
 
} 
 

 
var structure = getIdBasedStructure(document.querySelectorAll("#html > ul")[0]); 
 
console.log(JSON.stringify(structure));
<div id="html"> 
 
    <ul> 
 
    <li id="myFolder" type="folder">myFolder 
 
     <ul> 
 
     <li id="myFolder/fonts" class="empty" type="folder">fonts</li> 
 
     <li id="myFolder/index.html" type="file">index.html</li> 
 
     <li id="myFolder/js" type="folder">js 
 
      <ul> 
 
      <li id="myFolder/js/controllers" type="folder">controllers 
 
       <ul> 
 
       <li id="myFolder/js/controllers/core" type="folder">core 
 
        <ul> 
 
        <li id="myFolder/tempjs/controllerslates/core/menu.js" type="file">menu.js</li> 
 
        </ul> 
 
       </li> 
 
       <li id="myFolder/js/controllers/errors" type="folder">errors 
 
        <ul> 
 
        <li id="myFolder/js/controllers/errors/error.js" type="file">error.js</li> 
 
        </ul> 
 
       </li> 
 
       </ul> 
 
      </li> 
 
      </ul> 
 
     </li> 
 
     </ul> 
 
    </li> 
 
    </ul> 
 
</div>

Edit: von jQuery zu nativem Javascript umgewandelt.

+0

Vielen Dank für Ihre Hilfe, Ihr Code ist in der Nähe des erwarteten Ergebnisses, aber das scheint ein schwieriger Code für einen Anfänger wie mich. Ich denke, dass mein Lehrer verrückt ist, mich zu bitten, eine solche Übung ohne jeden Hinweis zu machen. ^^ – Barilo

0

var div = document.getElementById("html"); 
 
var parent = loopul(document.getElementById("html").getElementsByTagName("ul")[0])[0] 
 
function loopul(ul){ 
 
var lis = ul.getElementsByTagName("li"); 
 
if(lis.length>0){ 
 
var arr = []; 
 
for(var i=0;i<lis.length;i++){ 
 
\t //console.log(lis[i]); 
 
var nm = lis[i].innerText; 
 
if(lis[i].getElementsByTagName("ul").length>0){ 
 
nm = nm.replace(lis[i].getElementsByTagName("ul")[0].innerText,""); 
 
} 
 
nm = nm.replace(/[\n\r\t]/g,"").trim(); 
 
var du = lis[i].getElementsByTagName("ul").length ? loopul(lis[i].getElementsByTagName("ul")[0]) : []; 
 
arr.push({ 
 
"dir":lis[i].id ? lis[i].id : "", 
 
"name":nm, 
 
"type":lis[i].type, 
 
"children":du 
 
}); 
 
} 
 
return arr; 
 
}else return []; 
 
} 
 

 
console.log(parent);
<div id="html"> 
 
      <ul> 
 
       <li id="myFolder" type="folder">myFolder 
 
        <ul> 
 
         <li id="myFolder/fonts" class="empty" type="folder">fonts</li> 
 
         <li id="myFolder/index.html" type="file">index.html</li> 
 
         <li id="myFolder/js" type="folder">js 
 
          <ul> 
 
           <li id="myFolder/js/controllers" type="folder">controllers 
 
            <ul> 
 
             <li id="myFolder/js/controllers/core" type="folder">core 
 
              <ul> 
 
               <li id="myFolder/tempjs/controllerslates/core/menu.js" type="file">menu.js</li> 
 
              </ul> 
 
             </li> 
 
             <li id="myFolder/js/controllers/errors" type="folder">errors 
 
              <ul> 
 
               <li id="myFolder/js/controllers/errors/error.js" type="file">error.js</li> 
 
              </ul> 
 
             </li> 
 
            </ul> 
 
           </li> 
 
          </ul> 
 
         </li> 
 
        </ul> 
 
       </li> 
 
      </ul> 
 
</div>

+0

Danke für deine Hilfe, ich werde versuchen, deinen Code zu verstehen ^^ – Barilo

+0

froh, dir zu helfen :) –

Verwandte Themen