it-swarm.com.ru

Как я могу выбрать элемент по имени с помощью jQuery?

Есть столбец таблицы, который я пытаюсь развернуть и скрыть:

кажется, jQuery скрывает элементы td, когда я выбираю его с помощью class , но не с помощью name элемента.

Например, почему:

$(".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>
1082
T.T.T.

Вы можете использовать селектор 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'
1963
Jon Erickson

Любой атрибут может быть выбран с помощью способа [attribute_name=value]. Смотрите пример здесь :

var value = $("[name='nameofobject']");
191
user2804791

Если у вас есть что-то вроде:

<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 );
});
<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">
55
Andreas L.

Вы можете получить массив элементов по имени по старинке и передать этот массив в 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>

примечание: единственный раз, когда у вас будет причина использовать атрибут "имя", должен быть флажок или радиовходы.

Или вы можете просто добавить другой класс к элементам для выбора (это то, что я бы сделал)

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>
24
Your Friend Ken

Вы можете получить значение имени из поля ввода, используя элемент name в jQuery:

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);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form name="form1" id="form1">
  <input type="text" name="firstname" value="ABCD"/>
  <input type="text" name="lastname" value="XYZ"/>
</form>
20
Shrikant D

Frameworks обычно используют имена скобок в формах, например:

<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]\"]")
15
itsnikolay

Я сделал так, и это работает:

$('[name="tcol1"]')

https://api.jquery.com/attribute-equals-selector/

12
kscius

Вот простое решение: $('td[name=tcol1]')

5
Guest

Лично я делал в прошлом общий идентификатор класса и использовал его для выбора. Это может быть не идеально, поскольку у них есть определенный класс, который может не существовать, но это делает выбор намного проще. Просто убедитесь, что вы уникальны в своих именах классов.

то есть для примера выше я бы использовал ваш выбор по классам. Еще лучше изменить имя класса с жирного на "tcol1", чтобы избежать случайных включений в результаты jQuery. Если жирный шрифт действительно ссылается на класс CSS, вы всегда можете указать оба в свойстве класса - то есть 'class = "tcol1 bold"'.

Таким образом, если вы не можете выбрать по имени, либо используйте сложный селектор jQuery и примите любое связанное с этим снижение производительности, либо используйте селекторы класса.

Вы всегда можете ограничить область действия jQuery, включив имя таблицы, т.е. $ ('# tableID> .bold')

Это должно ограничить поиск jQuery в "мире".

Его все еще можно классифицировать как сложный селектор, но он быстро ограничивает любой поиск внутри таблицы с идентификатором "#tableID", поэтому сводит обработку к минимуму.

Альтернативой этого, если вы ищете более 1 элемента в # table1, будет поиск этого отдельно, а затем передача его в jQuery, так как это ограничивает область действия, но экономит немного обработки, чтобы искать его каждый раз.

var tbl = $('#tableID');
var boldElements = $('.bold',tbl);
var rows = $('tr',tbl);
if (rows.length) {
   var row1 = rows[0]; 
   var firstRowCells = $('td',row1); 
}
3
Steve Childs

Вы забыли второй набор цитат, что делает принятый ответ неверным:

$('td[name="tcol1"]') 
3
Chris J

Вы можете использовать любой атрибут как селектор с [attribute_name=value].

$('td[name=tcol1]').hide();
3
user6139189
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="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>
3
sumith deepan

Вы можете получить элемент в JQuery, используя его атрибут ID следующим образом:

$("#tcol1").hide();
2
CalebHC