2017-08-31 1 views
1

Was ist der beste Weg, dies zu erreichen, Vanille JavaScript. Ich möchte es wirklich verstehen. Vielen Dank.Geschwister pure JavaScript mit show and hide, jetzt jQuery

$(duplicate[ii]).hide().siblings().show(); 
+1

Implementieren Sie es eins nach dem anderen. Zuerst 'hide()'. Dann holen Sie Geschwister. Dann zeige sie alle. Stackoverflow ist kein kostenloser jquery-> nativer DOM-Code-Konvertierungsdienst. – zerkms

+0

Es ist kompliziert, wenn Sie über die Lockerung und alles reden. Einfach gesagt, schauen Sie einfach über die 'Element.childNodes' und stellen Sie sicher, dass' Element.childNodes [increment] .nodeType === 1' und Effekt 'Element.childNodes [increment] .style.opacity = opacityIncrement' ist. Um rückwärtskompatibel zu sein, benutzt man 'Element.childNodes [increment] .style.filter = 'alpha (opacity =' + alphaIncrement + ')''. – PHPglue

Antwort

5

duplicate[ii] Angenommen wird ein DOM-Element, könnten Sie Schleife die Kinder der Eltern dieses Elements, und legen Sie den Stil des eigentlichen Elements nach der Schleife.

const d = duplicate[ii]; 

for (const el of d.parentNode.children) { 
    el.style.display = "block"; 
} 
d.style.display = "none"; 

Während jedoch, dass im Grunde eine Übersetzung ist, würde ich es auf diese Weise nicht schreiben. Ich würde Klassen mit dem entsprechenden Styling verwenden:

const d = duplicate[ii]; 

for (const el of d.parentNode.querySelectorAll(".hide")) { 
    el.classList.remove("hide"); 
} 
d.classList.add("hide"); 

.hide { 
    display: none; 
} 

Wenn Sie wissen, nur ein Element hide zu einem bestimmten Zeitpunkt haben, können Sie die Schleife fallen.

const h = duplicate[ii].parentNode.querySelector(".hide") 
if (h) { 
    h.classList.remove("hide"); 
} 
duplicate[ii].classList.add("hide"); 

Wenn Sie dies häufig tun, würde ich eine Nutzenfunktion erstellen, die einen Klassennamen erhält, ein Element, und eine Sammlung. Sie können es sogar erweitern, sodass die Sammlung optional ist. In diesem Fall würden Sie die Geschwister verwenden.

function swapClass(clss, target, els) { 
    if (!els) { 
     els = target.parentNode.children; 
    } 

    for (const el of els) { 
     el.classList.remove(cls); 
    } 
    target.classList.add(cls); 
} 

Dann ist es wie folgt aus:

swapClass("hide", duplicate[ii]); 
0
const toArray = (list) => Array.prototype.slice.call(list) 

const foo = (node) => { 
    let children = toArray(node.parentNode.children) 
    children.forEach(child => { 
     child.style.display = child === node ? 'none' : 'block' 
    }) 
} 

Wenn duplicate[ii] ein DOM, nur foo(duplicate[ii])

Wenn duplicate[ii] ein CSS-Selektor ist, können Sie

toArray(document.querySelectorAll(selector)).forEach(node => { 
    foo(node) 
}) 

Diese Antwort wird angenommen, Knoten ist Block Element