JQuery: Smyčka přes prvky a nastavit jako proměnné mimo rozsah

0

Otázka

Snažím se načíst DOM prvek z pole, a chci ho nastavit jako proměnnou pro použití mimo její rámec. Právě teď, můj proměnné future_devices vrátí jeden objekt, jak se očekávalo. Ale moje jiná proměnná future_device vrátí objekt, když současná DOM měl vrátit [] vzhledem k mé poslední if prohlášení. Původně jsem se pokusil deklarovat proměnné jako var vzhledem k rozsahu ale to nepomohlo. Tady je můj kód:

var future_devices = $('.hardware .future-hardware')

if (future_devices.length) {

  let future_device = $(future_devices)
    .each(function() {

      let device = this
      let device_work_order = $(device)
        .data(
          'work-order'
        )

      if (device_work_order == data['new_host']['work_order']) {

        return device

      }

    })

Můžu vám říct, že se DOM, dvou proměnných, já používám porovnat mít následující hodnoty:

device_work_order = 3MOD0

data['new_host']['work_order'] = 3MOD9

Takže od té doby future_devices vrátí pouze jeden objekt a můj poslední if tvrzení není pravdivé, měl bych dostat [], ne?

ajax javascript jquery
2021-11-24 04:14:54
1

Nejlepší odpověď

0

$(...) vrací jQuery kolekce a vždy bude, bez ohledu. Takže pomocí příkazu přiřazení .each() je špatný přístup.

Řešení: Přiřadit návrat .filter() místo. Filtr je navržen tak, aby dosáhnout svého cíle. Referenční

POZNÁMKA: měli byste Si uvědomit, že pokud existuje více než jeden zápas, vrátí celou sbírku zápasů. V kódu níže jsem ukázat pouze první zápas, ale od té doby, tam jsou dva zápasy (pro demonstraci), uvidíte, že oba zápasy jsou vráceny.

const future_devices = $('.hardware .future-hardware');
const data = {new_host: {work_order: 333}};

const future_device = $(future_devices)
  .filter(function(idx, el) {
    let device_work_order = $(el).data('work-order');
    if (device_work_order == data['new_host']['work_order']) {
      return true;
    } else {
      return false;
    }

  })
console.log("First match only: ", future_device[0]); // First match
console.log("Collection: ",future_device); // All matches
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="hardware">
  <div class="future-hardware" data-work-order="111">111</div>
</div>
<div class="hardware">
  <div class="future-hardware" data-work-order="333">First Match</div>
</div>
<div class="hardware">
  <div class="future-hardware" data-work-order="111">111</div>
</div>
<div class="hardware">
  <div class="future-hardware" data-work-order="333">Second Match</div>
</div>
<div class="hardware">
  <div class="future-hardware" data-work-order="111">111</div>
</div>
<div class="hardware">
  <div class="future-hardware" data-work-order="111">111</div>
</div>

2021-11-24 05:08:48

Děkuji!!! Použil jsem vaše řešení, a to mi výsledky, které jsem hledal! Viděl jsem tuto funkci dříve a já jsem se pokusil použít, ale nemohl jsem se dostat to funguje. Myslím, že můj hlavní problém byl, že jsem nebyla s využitím funkce() a vracet objekt. Myslím, že jsem také plně nerozumím .každý() metoda. Ale děkuji za vaši odpověď! Od té doby, jsem využila této metody vs .každý (), kde jinde v mém kódu, který se zdál vhodnější a pomocí "return" funkce
Franklin

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................