How can I select an element by name with jQuery?
有一个我正试图展开和隐藏的表列:
jquery在我按类而不是按元素的名称选择它时,似乎隐藏了
例如,为什么:
1 2 | $(".bold").hide(); // selecting by class works $("tcol1").hide(); // select by element name does not work |
注意下面的HTML,第二列的所有行都具有相同的名称。如何使用
1 2 3 4 5 6 7 8 9 10 11 12 | <tr> <td>data1</td> <td name="tcol1" class="bold"> data2</td> </tr> <tr> <td>data1</td> <td name="tcol1" class="bold"> data2</td> </tr> <tr> <td>data1</td> <td name="tcol1" class="bold"> data2</td> </tr> |
可以使用属性选择器:
1 2 3 4 5 6 7 | $('td[name=tcol1]') // matches exactly 'tcol1' $('td[name^=tcol]') // matches those that begin with 'tcol' $('td[name$=tcol]') // matches those that end with 'tcol' $('td[name*=tcol]') // matches those that contain 'tcol' |
可以使用
1 | var value = $("[name='nameofobject']"); |
如果你有类似的东西:
1 2 | <input type="checkbox" name="mycheckbox" value="11" checked=""> <input type="checkbox" name="mycheckbox" value="12"> |
你可以这样阅读:
1 2 3 | jQuery("input[name='mycheckbox']").each(function() { console.log( this.value +":" + this.checked ); }); |
片段:
1 2 3 | jQuery("input[name='mycheckbox']").each(function() { console.log( this.value +":" + this.checked ); }); |
1 2 3 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> <input type="checkbox" name="mycheckbox" value="11" checked=""> <input type="checkbox" name="mycheckbox" value="12"> |
您可以按传统的方式命名元素数组,并将该数组传递给jquery。
1 2 3 4 | function toggleByName() { var arrChkBox = document.getElementsByName("chName"); $(arrChkBox).toggle(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> <html> <head> sandBox </head> <body> <input type="radio" name="chName"/><br /> <input type="radio" name="chName"/><br /> <input type="radio" name="chName"/><br /> <input type="radio" name="chName"/><br /> <input type="button" onclick="toggleByName();" value="toggle"/> </body> </html> |
注意:您唯一有理由使用"name"属性的时间应该是复选框或无线电输入。
或者你可以在元素中添加另一个类来进行选择(这是我要做的)。
1 2 3 4 5 6 7 | function toggleByClass(bolShow) { if (bolShow) { $(".rowToToggle").show(); } else { $(".rowToToggle").hide(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> <html> <head> sandBox </head> <body> <table> <tr> <td>data1</td> <td class="bold rowToToggle">data2</td> </tr> <tr> <td>data1</td> <td class="bold rowToToggle">data2</td> </tr> <tr> <td>data1</td> <td class="bold rowToToggle">data2</td> </tr> </table> <input type="button" onclick="toggleByClass(true);" value="show"/> <input type="button" onclick="toggleByClass(false);" value="hide"/> </body> </html> |
在jquery中,可以通过以下方式使用name元素从输入字段中获取name值:
1 2 3 4 | var firstname = jQuery("#form1 input[name=firstname]").val(); //Returns ABCD var lastname = jQuery("#form1 input[name=lastname]").val(); //Returns XYZ console.log(firstname); console.log(lastname); |
1 2 3 4 5 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> <form name="form1" id="form1"> <input type="text" name="firstname" value="ABCD"/> <input type="text" name="lastname" value="XYZ"/> </form> |
框架通常在形式中使用括号名称,例如:
1 | <input name=user[first_name] /> |
它们可以通过以下方式访问:
1 2 3 4 5 6 7 8 | // in JS: this.querySelectorAll('[name="user[first_name]"]') // in jQuery: $('[name="user[first_name]"]') // or by mask with escaped quotes: this.querySelectorAll("[name*="[first_name]"]") |
我已经这样做了,而且它是有效的:
1 | $('[name="tcol1"]') |
https://api.jquery.com/attribute-equals-selector/
这里有一个简单的解决方案:
您忘记了第二组引号,这使得接受的答案不正确:
1 | $('td[name="tcol1"]') |
您可以使用任何属性作为带有
1 | $('td[name=tcol1]').hide(); |
就我个人而言,我过去所做的就是给他们一个公共的类ID,并用它来选择它们。它可能并不理想,因为它们指定了一个可能不存在的类,但是它使选择变得非常容易。只要确保你的类名是唯一的。
也就是说,对于上面的示例,我将按类使用您的选择。更好的方法是将类名从粗体改为"tcol1",这样就不会在jquery结果中意外包含任何内容。如果粗体确实引用了CSS类,则可以始终在Class属性中同时指定这两个属性,即"class="tcol1-bold""。
总之,如果不能按名称选择,可以使用复杂的jquery选择器并接受任何相关的性能命中,也可以使用类选择器。
您总是可以通过包含表名来限制jquery范围,即$('tableid>.bold')
这将限制jquery搜索"世界"。
它仍然可以被归类为一个复杂的选择器,但是它可以快速地将任何搜索约束到ID为"table id"的表中,从而将处理保持在最低限度。
如果您在table1中查找的元素不止一个,那么另一种选择是单独查找这个元素,然后将其传递给jquery,因为这限制了作用域,但每次查找都会节省一些处理。
1 2 3 4 5 6 7 | var tbl = $('#tableID'); var boldElements = $('.bold',tbl); var rows = $('tr',tbl); if (rows.length) { var row1 = rows[0]; var firstRowCells = $('td',row1); } |
1 2 3 4 | function toggleByName() { var arrChkBox = document.getElementsByName("chName"); $(arrChkBox).toggle(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> <html> <head> sandBox </head> <body> <input type="text" name="chName"/><br /> <input type="text" name="chName"/><br /> <input type="text" name="chName"/><br /> <input type="text" name="chName"/><br /> <input type="button" onclick="toggleByName();" value="toggle"/> </body> </html> |
通过使用jquery的id属性,可以在jquery中获取元素,如下所示:
1 | $("#tcol1").hide(); |
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 | <script src="jquery.min.js"> <script type="text/javascript"> $(document).ready(function(){ var a= $("td[name=tcol3]").html(); alert(a); }); <table border="3"> <tr> <td>data1</td> <td name="tcol1" class="bold"> data2tcol1</td> </tr> <tr> <td>data1</td> <td name="tcol2" class="bold"> data2tcol2</td> </tr> <tr> <td>data1</td> <td name="tcol3" class="bold"> data2tcol3</td> </tr> </table> |
这是有帮助的代码。