Ho trovato una soluzione. Per favore correggimi se questo è un approccio sbagliato.
ho aggiunto un evento onclick a tutto il tag particolari e fece una funzione thisindex(this)
che restituisce l'indice del tag cliccato e il numero di indice ottenuto viene poi passato alla un'altra funzione closeAll()
che riduce al minimo/chiude tutti gli altri tag aperti tranne uno il cui indice corrisponde a quello che abbiamo ottenuto in precedenza.
Ecco il codice.
function thisindex(elm){
var nodes = elm.parentNode.childNodes, node;
var i = 0, count = i;
while((node=nodes.item(i++)) && node!=elm)
if(node.nodeType==1) count++;
return count;
}
function closeAll(index){
var len = document.getElementsByTagName("details").length;
for(var i=0; i<len; i++){
if(i != index){
document.getElementsByTagName("details")[i].removeAttribute("open");
}
}
}
<details onclick="closeAll(thisindex(this));">
<summary>1</summary>Demo 1
</details>
<details onclick="closeAll(thisindex(this));">
<summary>2</summary>Demo 2
</details>
<details onclick="closeAll(thisindex(this));">
<summary>2</summary>Demo 3
</details>
Lo stesso con l'aiuto di jQuery
$(document).ready(function(){
$('details').click(function (event) {
var index = $('details').index(this);
var len = $("details").length;
for(var i=0; i<len; i++){
if(i != index){
$("details")[i].removeAttribute("open");
}
}
});
});
Gentilmente mi suggeriscono un approccio migliore, se questo non all'altezza del marchio.
fonte
2013-05-26 09:16:07
quello che hai provato finora? – Femaref