简体   繁体   English

用于切换未执行的类中的所有标签的 Javascript 函数

[英]Javascript function to toggle all tags in a classes not executing

I am trying to toggle classes using Javascript which runs on a template generated by Django.我正在尝试使用在 Django 生成的模板上运行的 Javascript 来切换类。 I have the following code:我有以下代码:

 document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('.cat').forEach(category => { category_id = category.getAttribute('id').slice(1,); var toggle_class_name = `child-of-${category_id}`; category.addEventListener('click', () => toggle_class(toggle_class_name)); }); }); function toggle_class(toggle_class_name) { console.log(toggle_class_name); document.querySelectorAll(toggle_class_name).forEach(item => { console.log('loop triggered'); var current_display = item.style.display; if (current_display === 'none') { current_display = 'block'; console.log(`expanding`); } else { current_display = 'none'; console.log(`collapsing`); } item.style.display = current_display; }); };
 <div> <table class='table'> <tr> <th class='ref-col'>Reference</th> <th class='des-col'>Description</th> <th class='mth-head'>Jun-20</th> <th class='mth-head'>Jul-20</th> <th class='mth-head'>Aug-20</th> </tr> <tr id='c2' class='child-of-None cat'> <td class='ref-col'>C0002</td> <td class='des-col'>Financial Statements</td> <td class='amt-col'></td> <td class='amt-col'></td> <td class='amt-col'></td> </tr> <tr id='c1' class='child-of-2 cat'> <td class='ref-col'>C0001</td> <td class='des-col'>&nbsp&nbsp&nbspBalance Sheet</td> <td class='amt-col'></td> <td class='amt-col'></td> <td class='amt-col'></td> </tr> <tr id='c6' class='child-of-1 cat'> <td class='ref-col'>C0006</td> <td class='des-col'>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspNon-Current Assets</td> <td class='amt-col'></td> <td class='amt-col'></td> <td class='amt-col'></td> </tr> <tr id='c11' class='child-of-6 cat'> <td class='ref-col'>C0011</td> <td class='des-col'>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspProperty, Plant &amp; Equipment</td> <td class='amt-col'></td> <td class='amt-col'></td> <td class='amt-col'></td> </tr> <tr id='g1000001' class='child-of-11 gl'> <td class='ref-col'>1000001</td> <td class='des-col'>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspFreehold Land</td> <td class='amt-col'></td> <td class='amt-col'></td> <td class='amt-col'></td> </tr> </table>

The toggle_class function does get triggered as the toggle_class_name gets correctly logged onto the console.当 toggle_class_name 正确登录到控制台时,toggle_class 函数确实会被触发。 However none of the other things get logged onto the console.但是,其他任何事情都不会登录到控制台。 The tags in the DOM which are of the class 'toggle_class_name' do not get toggled when I click the 'category'.当我单击“类别”时,DOM 中属于“toggle_class_name”类的标签不会被切换。 These tags have additional classes other than 'toogle_class_name' as well.除了“toogle_class_name”之外,这些标签还有其他类。

Why are the classes not getting toggled?为什么类没有被切换?

You have several issues in your code:您的代码中有几个问题:

  1. .slice(1, ); - I think this is a syntax error. - 我认为这是一个语法错误。 It should be .slice(1);它应该是.slice(1); (no comma) (没有逗号)
  2. A selector is missing the dot .选择器缺少点. for the class name - so change this line to include it like: var toggle_class_name = '.child-of-${category_id}';对于类名 - 因此更改此行以包含它,例如: var toggle_class_name = '.child-of-${category_id}';
  3. Instead of adding removing properties manually, it's likely best to toggle classes with the desired properties与其手动添加删除属性,不如切换具有所需属性的类

See working demo below:请参阅下面的工作演示:

 document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('.cat').forEach(category => { category_id = category.getAttribute('id').slice(1); var toggle_class_name = `.child-of-${category_id}`; category.addEventListener('click', () => toggle_class(toggle_class_name)); }); }); function toggle_class(toggle_class_name) { console.log(toggle_class_name); document.querySelectorAll(toggle_class_name).forEach(item => { item.classList.toggle('hidden'); }); };
 tr.hidden{ display: none; }
 <div> <table class='table' border=1> <tr> <th class='ref-col'>Reference</th> <th class='des-col'>Description</th> <th class='mth-head'>Jun-20</th> <th class='mth-head'>Jul-20</th> <th class='mth-head'>Aug-20</th> </tr> <tr id='c2' class='child-of-None cat'> <td class='ref-col'>C0002</td> <td class='des-col'>Financial Statements</td> <td class='amt-col'></td> <td class='amt-col'></td> <td class='amt-col'></td> </tr> <tr id='c1' class='child-of-2 cat'> <td class='ref-col'>C0001</td> <td class='des-col'>&nbsp&nbsp&nbspBalance Sheet</td> <td class='amt-col'></td> <td class='amt-col'></td> <td class='amt-col'></td> </tr> <tr id='c6' class='child-of-1 cat'> <td class='ref-col'>C0006</td> <td class='des-col'>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspNon-Current Assets</td> <td class='amt-col'></td> <td class='amt-col'></td> <td class='amt-col'></td> </tr> <tr id='c11' class='child-of-6 cat'> <td class='ref-col'>C0011</td> <td class='des-col'>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspProperty, Plant &amp; Equipment</td> <td class='amt-col'></td> <td class='amt-col'></td> <td class='amt-col'></td> </tr> <tr id='g1000001' class='child-of-11 gl'> <td class='ref-col'>1000001</td> <td class='des-col'>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspFreehold Land</td> <td class='amt-col'></td> <td class='amt-col'></td> <td class='amt-col'></td> </tr> </table> </div>

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

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