有一个表格列我正在尝试展开和隐藏:
当我按class而不是按元素name选择时,jQuery似乎隐藏了td
元素。
例如,为什么:
$(".bold").hide(); // selecting by class works
$("tcol1").hide(); // select by element name does not work
请注意下面的HTML,第二列对所有行都具有相同的名称。如何使用name
属性创建此集合?
<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>
答案 0 :(得分:1958)
您可以使用attribute选择器:
$('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 :(得分:191)
可以使用[attribute_name=value]
方式选择任何属性。
请参阅示例here:
var value = $("[name='nameofobject']");
答案 2 :(得分:54)
如果你有类似的话:
<input type="checkbox" name="mycheckbox" value="11" checked="">
<input type="checkbox" name="mycheckbox" value="12">
你可以这样阅读:
jQuery("input[name='mycheckbox']").each(function() {
console.log( this.value + ":" + this.checked );
});
摘录:
jQuery("input[name='mycheckbox']").each(function() {
console.log( this.value + ":" + this.checked );
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" name="mycheckbox" value="11" checked="">
<input type="checkbox" name="mycheckbox" value="12">
&#13;
答案 3 :(得分:24)
您可以按照老式的方式获取元素数组,并将该数组传递给jQuery。
function toggleByName() {
var arrChkBox = document.getElementsByName("chName");
$(arrChkBox).toggle();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<head>
<title>sandBox</title>
</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”属性的唯一一次应该是复选框或无线电输入。
或者你可以在元素中添加另一个类供选择。(这就是我要做的)
function toggleByClass(bolShow) {
if (bolShow) {
$(".rowToToggle").show();
} else {
$(".rowToToggle").hide();
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<head>
<title>sandBox</title>
</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>
答案 4 :(得分:20)
您可以使用jQuery中的name元素从输入字段获取名称值:
for (int i = 0; i < bubble_Data.length; i++)
{
if ( bubble_Data[i][0]>0)
count++;
}
x_Array = new double[count];
int k = 0;
for (int i = 0; i < bubble_Data.length; i++)
{
if ( bubble_Data[i][0]>0)
{
x_Array[k] = bubble_Data[i];
k++;
}
}
&#13;
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);
&#13;
答案 5 :(得分:15)
框架通常在表单中使用括号,例如:
<input name=user[first_name] />
可以通过以下方式访问它们:
// 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]\"]")
答案 6 :(得分:12)
答案 7 :(得分:5)
以下是一个简单的解决方案:$('td[name=tcol1]')
答案 8 :(得分:3)
就个人而言,我过去所做的就是给他们一个共同的类ID并用它来选择它们。它可能并不理想,因为它们具有可能不存在的指定类,但它使选择变得更加容易。只要确保你的班级名称是独一无二的。
即。对于上面的示例,我将按类使用您的选择。更好的方法是将类名从粗体更改为'tcol1',这样您就不会在jQuery结果中出现任何意外的内容。如果粗体确实引用了CSS类,则可以始终在类属性中指定它们 - 即'class =“tcol1 bold”'。
总之,如果您不能按名称选择,请使用复杂的jQuery选择器并接受任何相关的性能命中或使用类选择器。
您始终可以通过包含表名来限制jQuery范围,即 $('#tableID&gt; .bold')
这应该限制jQuery搜索“世界”。
它仍然可以被归类为一个复杂的选择器,但它很快就会限制在表中使用'#tableID'的ID进行搜索,因此将处理保持在最低限度。
如果你在#table1中寻找超过1个元素,那么另一个选择就是单独查看它然后将它传递给jQuery,因为这限制了范围,但是节省了一些处理来查找每个元素时间。
var tbl = $('#tableID');
var boldElements = $('.bold',tbl);
var rows = $('tr',tbl);
if (rows.length) {
var row1 = rows[0];
var firstRowCells = $('td',row1);
}
答案 9 :(得分:3)
您可以将任何属性用作[attribute_name=value]
的选择器。
$('td[name=tcol1]').hide();
答案 10 :(得分:3)
function toggleByName() {
var arrChkBox = document.getElementsByName("chName");
$(arrChkBox).toggle();
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<head>
<title>sandBox</title>
</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>
&#13;
答案 11 :(得分:3)
您忘记了第二组引号,这使得接受的答案不正确:
$('td[name="tcol1"]')
答案 12 :(得分:2)
你可以使用它的ID属性来获取JQuery中的元素:
$("#tcol1").hide();
答案 13 :(得分:1)
今天(2020.06.16),我在Chrome 83.0,Safari 13.1.1和Firefox 77.0的MacOs High Sierra上针对所选解决方案执行测试。
按名称获取元素
getElementByName
(C)是适用于大型阵列和小型阵列的所有浏览器的最快解决方案-但是,我可能是某种延迟加载解决方案,或者它使用带有名称-元素对的某些内部浏览器哈希缓存querySelectorAll
(D)解决方案快按名称获取行并将其隐藏(从理论上讲,我们从理论上最快地排除了预先计算的本机解决方案(I)-用作参考)
"default:none"
-但看来他们找到比element.style.display='none'
我对按名称(A,B,C,D)读取的元素执行两次测试,然后隐藏该元素(E,F,G,H,我)
下面的代码段显示了使用的代码
//https://stackoverflow.com/questions/1107220/how-can-i-select-an-element-by-name-with-jquery#
// https://jsbench.me/o6kbhyyvib/1
// https://jsbench.me/2fkbi9rirv/1
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';
}
// -----------
// TEST
// -----------
function reset() { $('td[name=tcol1]').show(); }
[A,B,C,D].forEach(f=> console.log(`${f.name} rows: ${f().length}`)) ;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<div>This snippet only presents used codes</div>
<table>
<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>
</table>
<button onclick="E()">E: hide</button>
<button onclick="F()">F: hide</button>
<button onclick="G()">G: hide</button>
<button onclick="H()">H: hide</button>
<button onclick="I()">I: hide</button><br>
<button onclick="reset()">reset</button>
Chrome上的示例结果
答案 14 :(得分:-1)
您可以使用以下功能:
[{
"NS": "food",
"Brand": "bosch",
"legendKey": "5_1"
},
{
"NS": "food",
"Brand": "bosch",
"legendKey": "5_1"
},
{
"NS": "performance",
"Brand": "ge",
"legendKey": "4_2"
}]
<ul class="legend">Needstates
{
this.state.legend ? legend.map((ele, i) =>{
return(
<li>
<span key={i} style={{backgroundColor:this.state.colors[ele['legendKey'][2]-1]}}></span> {ele['NS']}
</li>
)
}
):
null
}
</ul>
答案 15 :(得分:-3)
<script src="jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var a= $("td[name=tcol3]").html();
alert(a);
});
</script>
<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>
这是可能有用的代码。