简体   繁体   English

如何多次调用一个函数,纯JS

[英]How to call a function multiple times, pure JS

I am trying to build a multiple elements with tabbed content functionality.我正在尝试构建具有选项卡式内容功能的多个元素。 How can I use the same function with multiple elements declared in var?如何对 var 中声明的多个元素使用相同的函数? Eg to have cloned parent div.tabs element with similar content but different ids and area-labels;例如,克隆具有相似内容但不同 id 和区域标签的父 div.tabs 元素; Don't mind the CSS ts just for snippet visuals不要介意仅用于片段视觉效果的 CSS ts

 const tab = document.querySelector('.tabs'); const tabButtons = tab.querySelectorAll('[role="tab"]'); const tabPanels = Array.from(tab.querySelectorAll('[role="tabpanel"]')); function tabClickHandler(e) { //Hide All Tabpane tabPanels.forEach(panel => { panel.hidden = 'true'; }); //Deselect Tab Button tabButtons.forEach( span => { span.setAttribute('aria-selected', 'false'); }); //Mark New Tab e.currentTarget.setAttribute('aria-selected', 'true'); //Show New Tab const { id } = e.currentTarget; const currentTab = tabPanels.find( panel => panel.getAttribute('aria-labelledby') === id ); currentTab.hidden = false; } tabButtons.forEach(span => { span.addEventListener('click', tabClickHandler); });
 /* Tabs Styling */ .tabs [role="tablist"] > h3 { cursor: pointer; } .tabs [role="tablist"] > h3[aria-selected="true"] { color: #4fcbf2; } .tabs [role="tabpanel"] p { position: absolute; background-color: #eff1f2; padding: 1.8em 2.2em; } .wp-block-columns { display: flex; margin-bottom: 1.75em; flex-wrap: wrap; gap: 1em; } .wp-block-columns { flex-wrap: nowrap; } .wp-block-column { flex-basis: 0; flex-grow: 1; }
 <div class="tabs wp-block-columns"> <div class="wp-block-column" role="tablist" aria-label="contractors"> <h3 class="has-normal-font-size" role="tab" aria-selected="true" id="contractors-1">Do you have a limited company that you want to use for international contracting but don't know how?</h3> <h3 class="has-normal-font-size" role="tab" aria-selected="false" id="contractors-2">Do you want to work abroad but are not satisfied with the retentions that</h3> </div> <div class="tabcontent wp-block-column"> <div role="tabpanel" aria-labelledby="contractors-1"><p>Access Tax and Accounting is a firm of accountants that specialises in this fields</p></div> <div role="tabpanel" aria-labelledby="contractors-2" hidden=""><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus semper</p></div> </div> </div>

Finally I found a solution, maybe not the best way, but it works.最后我找到了一个解决方案,也许不是最好的方法,但它有效。 I added a unique ID to each tabs container:我为每个标签容器添加了一个唯一 ID:

<div id="tabs-1" class="tabs wp-block-columns"> ... </div>

<div id="tabs-2" class="tabs wp-block-columns"> ... </div>

Created the list of elements using getElementsByClassName and placed my function and event listener in for loop with element list length as a condition.使用getElementsByClassName创建元素列表,并将我的函数和事件侦听器放入for循环中,以元素列表长度为条件。 After all replaced class name querySelector with id name .id selected from elements list.毕竟用从元素列表中选择的 id 名称.id替换了类名querySelector Array item controlled by loop variable.由循环变量控制的数组项。

if (document.getElementsByClassName('tabs').length) {
            
            var tabClass = document.getElementsByClassName("tabs");
            
            for (var i = 0; i < tabClass.length; i++) {
                
                const tab = document.querySelector('#' + tabClass[i].id);

                function tabClickHandler(e) { ... }             
                
                tabButtons.forEach(button => { ... });      
                
            }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM