2017-10-13 2 views
0

J'ai un script dans lequel cliquer sur un div particulier (par exemple id = packtoa) va (entre autres choses) .addclass ('show') afficher des éléments avec une classe qui correspond à l'id du div cliqué.Insérer un ID div dans le script

Ce qui fonctionne très bien, mais alors je veux que la prochaine div (id = packfhag) fasse la même chose, et ensuite la suivante. J'ai donc le même script plusieurs fois dans mon js avec juste le nom de la classe & changé. Je suis sûr qu'il y a une manière stupide et évidente d'automatiser cela, de sorte que tout div avec un identifiant commençant par "pack" va déclencher ce script, taper le div id, et l'insérer dans le script où le nom de la classe est appelé.

Et je suis sûr que je suis près à essayer d'adapter ce script:

$("div[id^=pack]").each(function() { 
    var match = this.id.match(/\w+$/)[0]; 
    $(this).addClass('show'); 
}); 

Mais Je ne peux pas le casser. Soit quelque chose ci-dessus ne va pas, ou je l'insérer dans le mauvais endroit dans le script:

// Tears of Ameratsu menu functions 
    $(document).bind('pageinit', function() { 
// When link is clicked 
    $('#packtoa').click(function() { 
// collapse the expansions menu 
    $("#expansionsmenu").click(); 
// hide everything except this expansion 
    $(".hidden").removeClass('show'); 
    $(".packtoa").addClass('show'); 
// clear the search, and trigger a blank search 
    $('input[data-type="search"]').val(''); 
    $('input[data-type="search"]').trigger("keyup"); 
    }); 
}); 

Qu'est-ce que je manque?

+0

pourquoi pas faire l'action de clic sur un clas s plutôt qu'un ID, alors chaque nouveau div créé a la même classe? – user101289

Répondre

0
// for selecting div which starts with pack 
// not recommended 
$("div[id^='pack']"); 

La meilleure option est d'utiliser l'attribut class, ajoutez l'attribut class à tous ceux div, puis

$('.commonClass').addClass('show'); 

Exemple:

// this is for testing 
 
// say you click 
 
$('#test').on('click',function(){ 
 
    $('.testclass').addClass('show'); 
 
});
.testclass{ 
 
display:none; 
 
} 
 
.show { 
 
    display:block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="testclass">div1</div> 
 
<div class="testclass">div2</div> 
 
<div class="testclass">div3</div> 
 

 
<input type='button' value='Click me to view div' id='test' />

+0

Je suis un peu confus par la réponse. Il semble que votre code soit le même que le mien, cliquez sur id: test, et cela affectera class: testclass. Mais alors, quand vous avez besoin de faire la même chose avec un ensemble d'ID/classe différent, ne devrez-vous pas taper le même script mais avec test1/testclass1, puis le taper à nouveau avec test3 etc –

+0

pour plusieurs classes On peut sélectionner comme ceci: '$ ('. class1, .class2, .class3')' –

+0

Si j'exécute $ (test ') .. à addclass (' show ') à $ ('. class1, .class2 etc), alors #test ajoutera 'show' à chacun d'entre eux. Alors que j'ai besoin de # test1 pour ajouter une classe à .test1, et # test2 pour ajouter une classe à .test2 etc –