Как остаться сухим в jQuery? - PullRequest
0 голосов
/ 26 декабря 2018

В jQuery есть способ сохранить часто используемые цепочки функций для последующего обращения к ним, чтобы поддерживать стиль кодирования DRY ?

Например, в следующем коде я хотел бысослаться на цепочку .closest('.row').closest('div').remove();:

$('#search-results .row .unsafe').closest('.row').closest('div').remove();
$('#search-results .warnings').closest('.row').closest('div').remove();
$('#search-results .textresults1:contains("Endpoint offline!")').closest('.row').closest('div').remove();
// lots more distinct selectors

Примерно так:

var bye = ".closest('.row').closest('div').remove()";

$('#search-results .row .unsafe').bye();
$('#search-results .warnings').bye();
$('#search-results .textresults1:contains("Endpoint offline!")').bye();
// more...

Мой вопрос касается только повторного использования цепочек функций таким образом - т.е. есть ли способ выполнения в jQueryцепочка функций хранится в виде строки в переменной.Я ценю, что любой пример кода может быть переписан, чтобы избежать необходимости в этом, но это другой вопрос.Я думаю, что может быть довольно много вариантов использования для хранения часто используемых цепочек функций, таких как это - например, для сложных стилей / анимационных процедур, возможно.

[Я знаю, что первый селектор может быть изменен, чтобы охватитьвсе последующие, но это сделано таким образом для производительности.#search-results содержит десятки тысяч <div>, каждый с дюжиной элементов внутри.Таким образом, нечеткие поиски выполняются последними (т. Е. Произвольное совпадение текста с :contains) после того, как предыдущие селекторы уже убили несколько тысяч строк.Кроме того, этот конкретный код взят из пользовательского сценария Greasemonkey, который я пишу, поэтому у меня нет возможности удалять эти ложные результаты прямо из источника, на стороне сервера - это не мой сервер / веб-сайт]

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Базовая инкапсуляция сделает это отлично:

function removeStuff(selector) {
  return $(selector)
    .closest('.row')
    .closest('div')
    .remove();
}

экспортировано из @ Heretic Monkey теперь удаленный комментарий.

0 голосов
/ 26 декабря 2018

Используя простой плагин, вы можете использовать его как .bye()

(function ( $ ) {
  $.fn.bye = function() {
    $(this).remove();
    //$(this).closest('.row').closest('div').remove();
  }
}( jQuery));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button>click</button>


<script>
  $(document).ready(function(){
     $('button').bye();
  });
</script>
...