Misturando javascript com jquery
Em um clique, atribuo uma classe ao meu elemento(CAMINHO SVG) usando javascript puro:
this.getElement().classList.add('active');
A nova classe faz parte de uma série de outras classes que já possui. No entanto, uma vez que essa nova classe é adicionada ao elemento clicado, ela também deve fornecer uma classe.active
para outros elementos no html que possuem classes correspondentes ao próprio elemento clicado.
html:
<button class="1600 1500"></button>
<button class="1600 1300 1200"></button>
<button class="1300 1200 1700 1800"></button>
<button class="1300 1200 1100 1900"></button>
<div class="1600 1700 item leaflet"></div>
Não sei qual botão tem uma classe correspondente, pois essas classes também são dinâmicas. Tudo o que sei é que a div terá qualquer classe correspondente à classe de qualquer botão.
O motivo é que, por razões específicas, estou usando javascript puro para atribuir um novo nome de classe ao clicar na div (trabalho):
this.getElement().classList.add('active');
Portanto, o seguinte não funcionará:
this.click(function() {
var classes = this.attr('class').split(' ')
classes.forEach(function(elem) {
$('.' + elem).addClass('active');
});
});
É assim que eu chamo o clique:
function onEachFeature(feature, layer) {
layer.on({
click: panelShow
});
}
function panelShow(e) {
// This works, the class is added to the clicked element
this.getElement().classList.add('active');
}
Mas eu tenho botões fora disso e precisa ter uma classe ativa conforme a pergunta.
Desejado após o clique div
<div class="1600 1700 item leaflet active"></div>
<button class="1600 1500 active"></button>
<button class="1600 1300 1200 active"></button>
<button class="1300 1200 1700 1800 active"></button>
<button class="1300 1200 1100 1900"></button>
É assim que trato do contrário, clicando nos botões (e funciona):
var date;
$("button").on("click", function(b) {
date = $(this).attr("data-date");
$('path').attr('class', function(index, classNames) {
return classNames.replace('active', '');
});
$("svg ." + date).attr('class', function(index, classNames) {
return classNames + ' active';
});
$(".btn").removeClass("active");
$(this).addClass("active");
});
NOTA
Na vida real nos botões que estou usandodata attribute
mas considere-a como uma classe para a pergunta de exemplo aqui, é apenas uma pasta de um código mais complexo que eu tenho.
Também estou usandofolhetosJS, é por isso que o javascript clica na função acima.