Поскольку я далек от того, чтобы быть даже новичком в jquery (я взял на себя кучу кода, и теперь мне нужен способ понять, как он работает и как его улучшить), у меня есть следующие коды:
jQuery:
$("#button1").click(function() {$("#btnbutton1:first-child").click();});
$("#button2").click(function() {$("#btnbutton2:first-child").click();});
$("#button3").click(function() {$("#btnbutton3:first-child").click();});
HTML:
<DIV class=hiddenButtons>
<div id = "btnbutton1"><SpotfireControl id = "2e21a4f7e5794ad98b0048672462a290" /></div>
<div id = "btnbutton2"><SpotfireControl id = "0f8b33874ec64a4285721f11b42373db" /></div>
<div id = "btnbutton3"><SpotfireControl id = "0ae43a8ccc784fa192dbc360431a912f" /></div>
</DIV>
[....]
<td id = "button1" class = "button-group active">Label1</td>
<td id = "button2" class = "button-group">Label2</td>
<td id = "button3" class = "button-group">Label3</td>
[....]
То, что я пытаюсь достичь, - это способ оптимизировать jquery до одной строки, подобной этой:
$("#"+param).click(function() {$("#btn"+param+":first-child").click();});
Другими словами: есть ли способ сократить этот jQuery до одной строки, которая после щелчка по объекту передает его идентификатор в jQuery, а затем выполняет действие щелчка? Спрашивая, как в моем jQuery будет около 20 таких строк, и я подумал, что будет понятнее иметь только одну, чтобы решить их все.

Шаблон, которому вы пытаетесь следовать, известен как «Не повторяйся» или «СУХОЙ».
Для этого вы можете использовать общие классы для элементов td, чтобы сгруппировать их, а также атрибуты data, чтобы добавить к каждому из них некоторые пользовательские метаданные, чтобы изменить поведение события клика. Что-то вроде этого:
<div class = "hiddenButtons">
<div id = "btnbutton1">
<SpotfireControl id = "2e21a4f7e5794ad98b0048672462a290" />
</div>
<div id = "btnbutton2">
<SpotfireControl id = "0f8b33874ec64a4285721f11b42373db" />
</div>
<div id = "btnbutton3">
<SpotfireControl id = "0ae43a8ccc784fa192dbc360431a912f" />
</div>
</div>
<td class = "button-group active" data-target = "#btnButton1">Label1</td>
<td class = "button-group" data-target = "#btnButton2">Label2</td>
<td class = "button-group" data-target = "#btnButton2">Label3</td>
$(".button-group").click(function() {
var selector = $(this).data('target');
$(selector).find(':first-child').trigger('click');
});
$('.button-group').on('click', function(){
$('#btn'+$(this).attr('id')).click();
})
Попробуй это...
Я бы сделал так (ES6)
$(".button-group").click(function() {
$(`#btn${this.id} SpotfireControl`).click();}
);
$("SpotfireControl").click(function() {
alert(`id: ${this.id}`)
})<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class=hiddenButtons>
<div id = "btnbutton1">
<SpotfireControl id = "2e21a4f7e5794ad98b0048672462a290" />
</div>
<div id = "btnbutton2">
<SpotfireControl id = "0f8b33874ec64a4285721f11b42373db" />
</div>
<div id = "btnbutton3">
<SpotfireControl id = "0ae43a8ccc784fa192dbc360431a912f" />
</div>
</div>
<table>
<tr>
<td id = "button1" class = "button-group active">Label1</td>
<td id = "button2" class = "button-group">Label2</td>
<td id = "button3" class = "button-group">Label3</td>
</tr>
</table>Или с VanillaJS
document.body.addEventListener('click', (e) => {
if (e.target.classList.contains('button-group')) {
const evt = new Event("click", {bubbles: true});
document
.getElementById(`btn${e.target.id}`)
.getElementsByTagName('SPOTFIRECONTROL')[0]
.dispatchEvent(evt);
e.stopPropagation();
}
if (e.target.tagName.toUpperCase() === 'SPOTFIRECONTROL') {
alert(`id: ${e.target.id}`);
}
})<div class=hiddenButtons>
<div id = "btnbutton1">
<SpotfireControl id = "2e21a4f7e5794ad98b0048672462a290" />
</div>
<div id = "btnbutton2">
<SpotfireControl id = "0f8b33874ec64a4285721f11b42373db" />
</div>
<div id = "btnbutton3">
<SpotfireControl id = "0ae43a8ccc784fa192dbc360431a912f" />
</div>
</div>
<table>
<tr>
<td id = "button1" class = "button-group active">Label1</td>
<td id = "button2" class = "button-group">Label2</td>
<td id = "button3" class = "button-group">Label3</td>
</tr>
</table>
Вы можете заменить
$(this).attr('id')простоthis.id