Как преобразовать массив результатов, возвращаемых в массив jQuery объектов? - PullRequest
0 голосов
/ 23 апреля 2020

Когда у меня есть $("someSelector"), он возвращает массив Node элементов. Как я могу преобразовать каждый Node как jQuery объект так, чтобы я мог выполнять jQuery функции над ними? * результаты функции для каждого элемента, кроме первого, jQuery объекта?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Обратите внимание, что когда вы используете что-то вроде:

// Selecting all <h1> tags. 
var headings = $( "h1" );

здесь headings теперь является элементом jQuery, содержащим все теги <h1>, уже имеющиеся на странице. Это можно проверить, проверив свойство .length headings:

// Viewing the number of <h1> tags on the page.
var headings = $( "h1" ); 
alert( headings.length );

Таким образом, когда вы используете $("someSelector") this, вам не нужно будет преобразовывать его снова в объект jQuery, поскольку это уже объект jQuery, и вы можете выполнять с ним все функции jQuery. Но поскольку $("someSelector") является коллекцией, мы не можем использовать .text() непосредственно для нее, нам потребуется l oop для каждого элемента в этой коллекции.

Вы можете использовать jQuery .each() метод здесь, который перебирает объект jQuery, выполняя функцию для каждого соответствующего элемента, например:

$("someSelector").each(function( index ) {
  console.log( index + ": " + $( this ).text() );
});

Как упомянуто в документах :

Метод .each() разработан, чтобы сделать циклические конструкции DOM краткими и менее подверженными ошибкам. При вызове он перебирает элементы DOM, которые являются частью объекта jQuery. Каждый раз, когда выполняется обратный вызов, ему передается текущая итерация l oop, начиная с 0. Что более важно, обратный вызов запускается в контексте текущего элемента DOM, поэтому ключевое слово this относится к элементу.

0 голосов
/ 23 апреля 2020

Как я могу преобразовать каждый Узел как jQuery объект, чтобы я мог выполнять jQuery функции над ними?

Используйте .map для передачи каждого элемента в $:

const $elements = [...$("someSelector")]
  .map(elem => $(elem));

Это даст вам массив из jQuery объектов, каждый из которых содержит один элемент. Но это немного странно.

как получить эквивалент получения результатов функции .text () для каждого элемента, кроме первого, jQuery объекта?

Если вам нужно использовать jQuery, если вы хотите, чтобы текст всего, кроме первого, нарезал массив, чтобы выделить все элементы, кроме первого, затем сопоставьте его:

const $texts = [...$("someSelector")]
  .slice(1)
  .map(elem => $(elem).text());

Но если вы извлекаете текст, я бы предпочел использовать textContent, нет необходимости сначала преобразовывать каждый элемент в jQuery объект:

const $texts = [...$("someSelector")]
  .slice(1)
  .map(elem => elem.textContent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...