Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Получить div с регулярным выражением в фоновом изображении

Автор вопроса: nimmoloОтветов: 1

Я пытаюсь написать скрипт на чистом js или jQuery, чтобы поймать каждый <div> с определенным регулярным выражением в его свойстве CSS background-image.

<div style="background-image: url('the_regex/http://example.org/image.jpg')>
<div style="background-image: url('the_regex/http://example.org/another.jpg')>

Я начинаю с существующего функционального скрипта, который собирает все элементы <img>, имеющие регулярное выражение в атрибуте src="". Он ищет такие элементы:

<img src="the_regex/http://example.org/img.jpg">
<img src="the_regex/http://example.org/img2.jpg">

с этим

  this.$imgs = $("img[src*='" + this.the_regex + "']");

Так что это работает для <img> элементов, но мой сайт состоит из <div> с background-image.


Из этого вопроса я знаю, как получить URL-адрес из данного div, но Я хочу собрать все элементы div с этим регулярным выражением в фоновом изображении в одну переменную, чтобы я мог их each удалить и удалить это регулярное выражение...

Между прочим, сценарий sencha-src-fallback.js. В конечном итоге он удаляет регулярное выражение из src, если выполняется определенное условие.

  • Я не знаю html, но что такое свойство background-image, это атрибут тега div? 16.09.2014

javascriptjqueryregexbackground-image

Ответы

Ответ 1 · рейтинг 2 · Terry

Вы можете комбинировать регулярное выражение и функцию .filter() для достижения желаемого. По сути, мы запускаем свойство background-image, полученное с помощью метода .css(), и проверяем, соответствуют ли они шаблону. Если это так, мы возвращаем список элементов (которым вы сможете манипулировать позже):

В приведенном ниже примере я хочу, чтобы фоновое изображение соответствовало шаблону /http:\/\/placehold\.it/gi (т. е. соответствовало http://placehold.it и являлось глобальным и нечувствительным к регистру совпадением), и если они соответствуют, я перемещаю их вверх. Конечно, вы должны использовать здесь свой собственный шаблон и связать альтернативные методы jQuery ниже по течению, я использую его как доказательство концепции :)

$('div').filter(function() {
    return $(this).css('background-image').match(/http:\/\/placehold\.it/gi);
}).slideUp();

Он работает как для фоновых изображений, указанных через CSS, так и для встроенного атрибута стиля.

См. демо здесь: http://jsfiddle.net/teddyrised/nmw9a4hk/2/


ОП спросил, можно ли отдельно определить регулярное выражение вне функции фильтра. Да, это возможно:

var pattern = new RegExp("http:\/\/placehold\.it", "gi");

$('div').filter(function() {
    return $(this).css('background-image').match(pattern);
}).slideUp();

См. обновленную демонстрацию здесь: http://jsfiddle.net/teddyrised/nmw9a4hk/12/

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы