2012-03-28 7 views
0
<ul id="types" style="list-type:none;"> 

<li id="categories" style="list-type:none;">1 
<ul> 
    <li style="list-type:none;">1</li><br/> 
    <li style="list-type:none;">1</li> 
</ul> 
</li> 

<li id="categories" style="list-type:none;">2 
<ul> 
    <li style="list-type:none;">2</li><br/> 
    <li style="list-type:none;">2</li> 
</ul> 
</li> 

<li id="categories" style="list-type:none;">3 
<ul> 
    <li style="list-type:none;">3</li><br/> 
    <li style="list-type:none;">3</li> 
</ul> 
</li> 

</ul> 

Ich ziehe den li oben und nach unten, wenn ich so tue ich den Code geschrieben haben eine jquery _mouseStop Funktion (Ereignis, noPropagation) für den Aufruf)Wie bekomme ich die aktuelle ul li Länge in Javascript, wenn ich versuchte, sie zu sortieren?

in dieser Funktion Ich schreibe

var tagetNode = this.currentItem[0].parentNode.id 

if (this.element[0].id == "categories") { 
    var targetlistlength = document.getElementById(targetListId).getElementsByTagName("li").length; 
    // var targetlistlength = this.parentNode.getElementsByTagName("li").length; 
    var PageIds = ""; 
    for (var i = 0; i < targetlistlength; i++) { 
     PageIds += document.getElementById(targetListId).getElementsByTagName("li")[i].getAttribute("value") + ","; 
    } 

} 

, wenn ich das Kind li bin Sortierung ist die obige Funktion aufgerufen, aber es ist immer das erste Kind ul ersten li Länge immer nur .. ich möchte die aktuelle Länge der ul li die i

zu sortieren versuche ich habe mit der co versucht mmented Linie auch die Länge von li aber iam immer Fehler zu erhalten, wie this.parentNode nicht definiert ist

jemand bitte mir vorschlagen, was ich

+5

Ihr JavaScript-Code enthält keine jQuery; ist das absichtlich, oder ist jQuery für Sie verfügbar? – Blazemonger

+0

Wenn Sie jQuery verwenden, warum nicht $ anstelle von document.getElementById() verwenden? –

+0

Ich denke, die OP absichtlich hinzugefügt 'jquery' Tag zu erfüllen Mindestanforderungen für" eine Frage stellen " –

Antwort

0

tun Da es keine Arbeits Demo verfügbar ist, können Sie überprüfen, was Sie bekommen, wenn Sie verwenden console.log($(this)); innerhalb dieser Funktion, wenn das mouseStop-Ereignis in der Konsole auftritt. Wenn Sie die erwartete li in der Konsole erhalten, können Sie den folgenden Code ausführen, um die Länge der Childs des übergeordneten Elements zu erhalten.

alert($(this).parent().children().length); 
+0

Hallo codef0rmer, wegen der doppelten IDs iam bekommen Problem, so entfernte ich die if-Bedingung, dann funktioniert es, und es wird auch Li's Länge richtig, die iam versucht zu bewegen. – suresh

+0

Großartig, Gut für Sie !. BTW, haben Sie meinen Code ausprobiert und wenn es auch funktioniert, dann können Sie den simplied Code verwenden, wie es gut lesbar ist. – codef0rmer

+0

Hallo, ich habe es mit deinem Code versucht, aber ich arbeite nicht. console.log ($ (this)) bekommt "_firebug" sowas und für $ (this) .parent(). children(). length wird alert als 0 – suresh

0

Es darf nicht mehrere Elemente mit derselben ID geben. Versuchen Sie, sie durch Klassen zu ersetzen oder sie einzigartig zu machen.

Die if-Bedingung die folgende sein könnte, wenn Sie eindeutige IDs (zB Kategorien-1, Kategorien-2, ...)

if (this.element[0].id.match("^categories") != null) { ... } 

Oder wenn Sie Klassen verwenden, die if-Bedingung sein könnte:

if (this.element[0].className.match("(^|)categories(|$)") != null) { ... } 
+0

Hallo Jasd danke für die Antwort geben, weil doppelte ID iam bekommen Problem, so dass ich entfernt, wenn Bedingung, dann funktioniert es, und es wird auch li Länge richtig, die Iam versucht sich zu bewegen. – suresh

+0

Ahh ich sehe, If-Bedingung ist nicht mehr notwendig, da currentItem jetzt das richtige Element hält ... –