使用 jQuery 按名称选择元素的方法 技术背景 在前端开发中,我们经常需要通过不同的方式来选择 HTML 元素。使用 jQuery 按名称选择元素就是一种常见的需求,尤其是在处理表单元素、复选框和单选框时。它能让开发者根据元素的 name
属性来精准地获取特定元素,以便进行后续的操作,如修改元素内容、隐藏或显示元素等。
实现步骤 1. 基本的属性选择器 可以使用 jQuery 的属性选择器,按照 [attribute_name=value]
的方式来选择元素。以下是一些基本示例:
1 2 3 4 $('td[name="tcol1"]' ); $('td[name^="tcol"]' ); $('td[name$="tcol"]' ); $('td[name*="tcol"]' );
2. 获取元素的值 如果要获取输入框中 name
属性对应的值,可以使用以下方法:
1 2 var firstname = jQuery ("#form1 input[name=firstname]" ).val ();var lastname = jQuery ("#form1 input[name=lastname]" ).val ();
3. 处理带有方括号名称的元素 对于一些使用方括号名称的表单元素,需要进行转义处理,具体示例如下:
1 2 <input type ="text" name ="foo" > <input type ="text" name ="foo[bar]" >
1 2 $('[name="foo"]' ); $('[name="foo\\[bar\\]"]' );
核心代码 按名称选择元素并处理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <!DOCTYPE html > <html > <head > <script src ="https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js" > </script > </head > <body > <p > <input type ="text" name ="foo" value ="copy name='foo'" > <input type ="text" disabled id ="result-1" placeholder ="i'm disabled" > </p > <p > <input type ="text" name ="foo[bar]" value ="copy name='foo[bar]'" > <input type ="text" disabled id ="result-2" placeholder ="i'm disabled" > </p > <input type ="button" id ="copy" value ="copy values" > <script > $('#copy' ).on ('click' , () => { let $from = $('[name="foo"]' ); let $to = $('#result-1' ); $to.val ($from.val ()); $from = $('[name="foo\\[bar\\]"]' ); $to = $('#result-2' ); $to.val ($from.val ()); }); </script > </body > </html >
性能测试代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 function A ( ) { return $('[name=tcol1]' ); }function B ( ) { return $(document .getElementsByName ("tcol1" )); }function C ( ) { return document .getElementsByName ("tcol1" ); }function D ( ) { return document .querySelectorAll ('[name=tcol1]' ); }function E ( ) { $('[name=tcol1]' ).hide (); }function F ( ) { $(document .getElementsByName ("tcol1" )).hide (); }function G ( ) { document .getElementsByName ("tcol1" ).forEach (e => e.style .display = 'none' ); }function H ( ) { document .querySelectorAll ('[name=tcol1]' ).forEach (e => e.style .display = 'none' ); }function I ( ) { let elArr = [...document .getElementsByName ("tcol1" )]; let length = elArr.length ; for (let i = 0 ; i < length; i++) elArr[i].style .display = 'none' ; }function reset ( ) { $('td[name=tcol1]' ).show (); } [A, B, C, D].forEach (f => console .log (`${f.name} rows: ${f().length} ` ));
最佳实践 使用类选择器 :如果 name
属性选择比较复杂,可以考虑给元素添加一个公共的类名,然后使用类选择器来选取元素,这样更易管理和维护。限制 jQuery 范围 :在选择元素时,可以通过指定父元素的 ID 来限制 jQuery 的搜索范围,例如:1 2 var tbl = $('#tableID' );var boldElements = $('.bold' , tbl);
常见问题 1. 方括号名称问题 如果 name
属性中包含方括号,如 name="foo[bar]"
,在 jQuery 选择器中需要对括号进行转义,即 $('[name="foo\\[bar\\]"]')
。
2. 性能问题 在大量元素的场景下,使用纯 jQuery 选择器的性能可能较差。通过性能测试发现,getElementByName
在大多数浏览器中对于大小数组都是最快的解决方案;混合的 JS - jQuery 解决方案在某些操作上也比其他方法更快。因此,可以根据实际情况选择合适的元素选择方法。