Какова цель новой булевской переменной () в JavaScript?

Ваш загруженный html просто в порядке. Проблема в вашей функции parseComicList, потому что она ищет имя класса, которого нет в очищенном HTML-коде. Позвольте мне объяснить, что происходит.

Когда вы загружаете www.gocomics.com в свой браузер и просматриваете html, есть несколько тегов img с именами классов img-fluid lazyloaded, которые вы ищете, и другие с именами классов lazyload img-fluid. Прокрутите немного и снова проверьте HTML. Вы заметите, что теги img с именами классов lazyload img-fluid изменились на img-fluid lazyloaded. Смотрите скриншот ниже:

class names change while you scroll

Это поведение, используемое этим сайтом, чтобы определить, ожидает ли изображение отложенную загрузку или нет, который обрабатывается внутри с помощью JavaScript при прокрутке сайта. Этот тип сценария отложенной загрузки обычно проверяет, находится ли изображение в окне просмотра или близко к входу в окно просмотра, и это делается путем сравнения положения прокрутки с положением изображения. Только тогда имена классов lazyload img-fluid изменятся на img-fluid lazyloaded.

Ваш вызов извлечения загружает только html-страницу этой страницы, но браузер не взаимодействует с этим кодом, то есть прокрутка отсутствует. Это означает, что, основываясь на моих наблюдениях о том, как имена классов этого сайта будут работать во время прокрутки, вы не найдете изображений с именами классов img-fluid lazyloaded.

Вместо этого сделайте html.indexOf('lazyload img-fluid'), чтобы искать изображения с начальным именем класса, и это будет работать. См. Пример ниже:

finding images with the initial class name

Еще один совет, который не подвергает вас ленивой загрузке логики сайта, - поиск тегов предков. со статическими именами классов, такими как comic__image или item-comic-image, а затем - нахождение первого тега img сразу после этой позиции. В некоторых случаях это может быть лучше, потому что это поможет вам убедиться, что вы сопоставляете только изображения внутри постов, вместо того, чтобы сопоставлять любые ленивые изображения загрузки сайта. В этом случае он начинает пропускать первое изображение, которое находится внутри верхнего баннера. См. Пример ниже:

alternatively looking for ancestor tags with static class names

60
задан Mark Byers 25 December 2010 в 22:25
поделиться

1 ответ

Глобальная функция Boolean () может использоваться для преобразования типов при вызове без new , например

var foo = Boolean(bar); // equivalent to `var foo = !!bar`

При вызове с new , объект-оболочка будет создан дополнительно, что означает, что вы можете назначить объекту произвольные свойства:

var foo = new Boolean(bar); // equivalent to `var foo = Object(Boolean(bar));`
foo.baz = 'quux';
alert(foo.baz);

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

var foo = true;
foo.baz = 'quux';
alert(foo.baz); // `foo.baz` is `undefined`

Назначение свойства объекту примитив не вызывает ошибки из-за автоматической упаковки, т.е.

foo.baz = 'quux';

будет интерпретироваться как

// create and immediately discard a wrapper object:
(new Boolean(foo)).baz = 'quux';

. Чтобы вернуть примитивное значение, вам нужно будет вызвать метод valueOf () . Это необходимо, если вы действительно хотите использовать обернутое значение, потому что объекты всегда оценивают значение true в логических контекстах - даже если обернутое значение равно false .

I '

65
ответ дан 24 November 2019 в 17:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: