Kann ich jQuery find() für mehr als einen Elementtyp gleichzeitig verwenden?

Lesezeit: 3 Minuten

Ich verwende die folgende Funktion, um die Auffüllung in einer Spalte in meinen Formularen zu ändern:

function padTitles() {
    $('#option-grid #dataTable tr, #topic-grid #dataTable tr')
        .each(function () {
            var tds = $(this).find('input'),
        text = tds.filter('[id^="input_TempRowKey_"]').val(),
        tdToPad = tds.filter('[id^="input_Title_"]'),
        pad;
            if (/\.0$/.test(text)) {
                pad = 10;
                level = 1;
            } else {
                pad = 35;
                level = 2;
            }
            tdToPad.css('margin-left', pad);
            a = tdToPad.closest('tr');
            if (tdToPad.closest('tr').get().className) {
                tdToPad.closest('tr').get().className = tdToPad.closest('tr').get().className.replace(/\blevel\-.*?\b/g, 'level-' + level);
            } else {
                tdToPad.closest('tr').addClass('level-' + level)
            }
        });
}

Es funktioniert gut für dieses HTML-Formular:

<td id="title_1" class=" ">
   <input type="text" value="Tests" name="item.Title" id="input_Title_1" >
</td>

Jetzt möchte ich auch, dass es für das folgende HTML funktioniert:

<td id="title_1" class=" ">    
  <textarea name="item.Title" id="input_Title_1">Tests</textarea>
</td>

Gibt es eine Möglichkeit, diese Funktion so zu ändern, dass sie für beide funktioniert? input oder textarea? Ich nehme an, der Weg, dies zu tun, ist, sich zu ändern var tds = $(this).find('input'), Ich bin mir jedoch nicht sicher, wie ich es ändern soll oder ob es möglich ist, entweder ein Textfeld oder eine Eingabe zu “finden”.

Benutzer-Avatar
Ry-

Verwenden Sie ein Komma, um mehrere Abfragen zu vereinen:

var tds = $(this).find('input, textarea');

Sie können auch verwenden :input als Selektor, aber es ist nicht so effizient und kann auch einige Dinge enthalten, die Sie lieber nicht einschließen möchten.

Sie können verwenden .children() die auszuwählen tds Kind, was immer es ist

var tds = $(this).children();

Benutzer-Avatar
Jashwant

Sie können kein hinzufügen textarea mit dem gleichen id als weiteres Element. Es ist falsch. id Werte sind für ein einzelnes HTML-Element innerhalb des Dokuments eindeutig.

würde ich dir vorschlagen class stattdessen.

<input type="text" value="Tests" class="myclass" name="item.Title" id="input_Title_1" >

<textarea name="item.Title" class="myclass" id="input_Title_2">Tests</textarea>

var tds = $(this).find('.myclass')

  • Ein Formular verwendet ein Textfeld, ein anderes eine Eingabe. Entschuldigung, ich hätte erwähnen sollen, dass es sich um zwei verschiedene Formen handelt.

    – Alan2

    28. Juli 2012 um 5:26 Uhr

  • Wenn sich beide Formulare auf derselben Seite befinden, ist es immer noch ungültig.

    – Jashwant

    28. Juli 2012 um 5:39 Uhr

jQuery( "selector1, selector2, selectorN" )

selector1: Jeder gültige Selektor. selector2: Ein weiterer gültiger Selektor. selectorN: Beliebig viele weitere gültige Selektoren. Die Reihenfolge der DOM-Elemente in der zurückgegebenen jQuery Objekt darf nicht identisch sein, da sie in der Dokumentreihenfolge stehen.
Beispiel: Findet die Elemente, die mit einem dieser drei Selektoren übereinstimmen.

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>multiple demo</title>
  <style>
  div, span, p {
    width: 126px;
    height: 60px;
    float: left;
    padding: 3px;
    margin: 2px;
    background-color: #eee;
    font-size: 14px;
  }
  </style>
  <script src="https://code.jquery.com/jquery-3.5.0.js"></script>
</head>
<body>
 
<div>div</div>
<p class="myClass">p class="myClass"</p>
<p class="notMyClass">p class="notMyClass"</p>
<span>span</span>
 
<script>
$( "div, span, p.myClass" ).css( "border", "3px solid red" );
</script>
 
</body>
</html>

Weiterlesen

1298090cookie-checkKann ich jQuery find() für mehr als einen Elementtyp gleichzeitig verwenden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy