Hoe kan ik een element op naam selecteren met jQuery?

Ik heb een tabelkolom die ik probeer uit te vouwen en te verbergen. jQuery lijkt de <td>elementen te verbergen wanneer ik het selecteer op classmaar niet op de namevan het element.

Bijvoorbeeld:

$(".bold").hide(); // Selecting by class works.
$("tcol1").hide(); // Selecting by name does not work.

Let op de HTML hieronder. De tweede kolom heeft dezelfde namevoor alle rijen. Hoe kan ik deze verzameling maken met het kenmerk 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>

Antwoord 1, autoriteit 100%

U kunt de jQuery-kenmerkselectorgebruiken:

$('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'

Antwoord 2, autoriteit 11%

Elk kenmerk kan worden geselecteerd op de manier [attribute_name=value].
Bekijk het voorbeeld hier:

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

Antwoord 3, autoriteit 3%

Als je iets hebt als:

<input type="checkbox" name="mycheckbox" value="11" checked="">
<input type="checkbox" name="mycheckbox" value="12">

Je kunt alles zo lezen:

jQuery("input[name='mycheckbox']").each(function() {
    console.log( this.value + ":" + this.checked );
});

Het fragment:

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">

Antwoord 4

Je zou de array van elementen op de ouderwetse manier bij naam kunnen krijgen en die array kunnen doorgeven aan 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>

Antwoord 5

Je kunt de naamwaarde uit een invoerveld halen met het naamelement in jQuery door:

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>

Antwoord 6

Frameworksgebruiken meestal haakjesnamenin formulieren, zoals:

<input name=user[first_name] />

Ze zijn toegankelijk via:

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

Antwoord 7

Ik heb het zo gedaan en het werkt:

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

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


Antwoord 8

Je bent de tweede set aanhalingstekens vergeten, waardoor het geaccepteerde antwoord onjuist is:

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

Antwoord 9

Hier is een eenvoudige oplossing: $('td[name=tcol1]')


Antwoord 10

Je kunt het element in JQuery krijgen door het ID-attribuut als volgt te gebruiken:

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

Antwoord 11

U kunt elk kenmerk als selector gebruiken met [attribute_name=value].

$('td[name=tcol1]').hide();

Antwoord 12

Persoonlijk, wat ik in het verleden heb gedaan, is ze een algemeen klasse-ID geven en dat gebruiken om ze te selecteren. Het is misschien niet ideaal omdat ze een klasse hebben gespecificeerd die misschien niet bestaat, maar het maakt de selectie een stuk eenvoudiger. Zorg ervoor dat je uniek bent in je klasnamen.

d.w.z. voor het bovenstaande voorbeeld zou ik uw selectie per klasse gebruiken. Nog beter zou zijn om de klassenaam te veranderen van vet in ‘tcol1’, zodat je geen onbedoelde toevoegingen krijgt in de jQuery-resultaten. Als vet daadwerkelijk naar een CSS-klasse verwijst, kun je altijd beide specificeren in de class-eigenschap – d.w.z. ‘class=”tcol1 bold”‘.

Kortom, als je niet op naam kunt selecteren, gebruik dan een gecompliceerde jQuery-selector en accepteer alle gerelateerde prestatiehits of gebruik klasse-selectors.

U kunt het jQuery-bereik altijd beperken door de tabelnaam op te nemen, d.w.z.
$(‘#tableID > .bold’)

Dat zou jQuery moeten beperken om de “wereld” te doorzoeken.

Het kan nog steeds worden geclassificeerd als een gecompliceerde selector, maar het beperkt het zoeken snel tot binnen de tabel met de ID van ‘#tableID’, zodat de verwerking tot een minimum wordt beperkt.

Een alternatief hiervoor als u op zoek bent naar meer dan 1 element binnen #table1 zou zijn om dit afzonderlijk op te zoeken en het vervolgens door te geven aan jQuery omdat dit de reikwijdte beperkt, maar het bespaart een beetje verwerking om het elk op te zoeken tijd.

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

Antwoord 13

Prestaties

Vandaag (2020.06.16) voer ik tests uit voor gekozen oplossingen op MacOs High Sierra in Chrome 83.0, Safari 13.1.1 en Firefox 77.0.

Conclusies

Elementen op naam ophalen

  • getElementByName(C) is de snelste oplossing voor alle browsers voor grote en kleine arrays – ik ben echter waarschijnlijk een soort van luie laadoplossing of het gebruikt een interne browser-hash-cache met name-element paren
  • gemengde js-jquery-oplossing (B) is sneller dan querySelectorAll(D)-oplossing
  • pure jQuery-oplossing (A) is het langzaamst

Haal rijen op naam en verberg ze (we sluiten de vooraf berekende native oplossing (I) – theoretisch de snelste) uit van vergelijking – deze wordt gebruikt als referentie)

  • verrassend genoeg is de gemengde js-jquery-oplossing (F) het snelst in alle browsers
  • verrassend genoeg is de vooraf berekende oplossing (I) langzamer dan jQuery (E,F)-oplossingen voor grote tabellen (!!!) – ik controleer dat .hide() jQuery-methode de stijl "default:none"op verborgen elementen – maar het lijkt erop dat ze dit sneller kunnen doen dan element.style.display='none'
  • jQuery (E)-oplossing is vrij snel op grote tafels
  • jquery (E) en querySelectorAll (H) oplossingen zijn het langzaamst voor kleine tabellen
  • getElementByName (G) en querySelectorAll (H) oplossingen zijn vrij traag voor grote tabellen

voer hier de afbeeldingsbeschrijving in

Details

Ik voer twee tests uit voor leeselementen op naam (A,B,C,D) en verberg die elementen (E,F,G,H,I)

  • kleine tabel – 3 rijen – u kunt de test HIER
  • uitvoeren

  • grote tabel – 1000 rijen – u kunt HIER
  • uitvoeren

Snippet hieronder toont gebruikte codes


Antwoord 14

U kunt de functie gebruiken:

get.elementbyId();

Other episodes