2015-08-13 2 views
-2

Я ищу для создания этого в vanilla JS, предоставленный jQuery. Я хотел использовать постное JS. Приведенный ниже код быстро дал быстрые результаты. Однако для сборки я бы хотел, чтобы он был более компактным.Включение этой ванили JS

Несколько раздражающих факторов, несколько дочерних потомков, неизвестные классы все и должны находиться внутри цикла.

$('.nav__adv').each(function(){ 
 

 
\t var $el = $(this), 
 
\t \t $no_advert = $('.main_ad_container div a div div', $el); 
 

 
\t $el.filter(function() { 
 
\t  return $.trim($no_advert.text()) === "Advertise Here"; 
 
\t }).css("display", "none").remove(); 
 

 
});

Любое направление/помощь/руководство?

+4

бы вы назвали преобразование рабочего кусок кода, который использует (хорошо известный, тяжело испытанный) библиотеку с тем же кодом без библиотеки с использованием 3х строк кода unvarified компактнее? (Я бы не стал). Лион должен научиться: не исправить то, что не сломано. Оптимизируйте только тогда, когда у вас проблемы с производительностью. – Amit

+2

'$ el.filter' кажется бессмысленным, учитывая, что' $ el' только ссылается на один элемент. Если вы просто завернули его в проверку «если» для теста рекламы, он сделает то же самое – CodingIntrigue

+0

@ Если у вас есть справедливая точка, в то время как мне не нравится много накладываться на библиотеки. jQuery является исключением. Я просто думаю, что это хорошо, если возможно, ваниль. Да, это 3 линии, но я хотел знать, что думает сообщество. Если я смогу вытащить среднего человека (jQuery), я сделаю это. Но несколько строк кода кажутся заманчивыми по длинному блоку кода. – Neil

ответ

2

Использование простого Javascript. Обратите внимание, что преимущество использования jQuery заключается в том, что он будет работать с перекрестным браузером.

[].forEach.call(document.querySelectorAll(".nav__adv"), function(el) { 
 
    var no_advert = el.querySelector(".main_ad_container div a div div"); 
 
    if(no_advert && no_advert.textContent.trim() === "Advertise Here") { 
 
     el.parentElement.removeChild(el); 
 
    } 
 
});
<div class="nav__adv"> 
 
    <div class="main_ad_container"> 
 
     <div> 
 
      <a> 
 
       <div> 
 
        <div>Advertise Here</div> 
 
       </div> 
 
      </a> 
 
     </div> 
 
    </div> 
 
</div> 
 
<div class="nav__adv"> 
 
    <div class="main_ad_container"> 
 
     <div> 
 
      <a> 
 
       <div> 
 
        <div>Leave Untouched</div> 
 
       </div> 
 
      </a> 
 
     </div> 
 
    </div> 
 
</div>

Если вам нужна поддержка кросс-браузер в ванильным JS, это становится немного сложнее.

+0

Вы намекаете на проблемы IE8 @RGraham? – Neil

+1

@Neil Вид. 'querySelector' должно быть хорошо в IE8, поскольку это просто простые селектора. 'forEach', однако, будет работать только в IE9 + и даже, только за пределами строгого режима. Замените 'forEach' на стандартный цикл' for', и он должен работать в IE8 + – CodingIntrigue

+1

Вы пропустили несколько точек :-) (например, обрезка) – Amit

1

Рассмотрите возможность написания того же кода в js примерно так. Хотя вам не нужно писать его, поскольку jQuery упрощает его с помощью лучшего и короткого синтаксиса.

var no_advert = document.querySelectorAll('.nav__adv .main_ad_container div a div div'); 
 

 
var el2hide = Array.prototype.filter.call(no_advert, function(elem) { 
 
    return elem.textContent.trim() === "Advertise Here"; 
 
}); 
 

 
Array.prototype.map.call(el2hide, function(_this){ _this.remove(); });
<div class="nav__adv"> 
 
    <div class="main_ad_container"> 
 
    <div> 
 
     <a> 
 
     <div> 
 
      <div>Advertise Here</div> 
 
     </div> 
 
     </a> 
 
    </div> 
 
    </div> 
 
</div> 
 
<div class="nav__adv"> 
 
    <div class="main_ad_container"> 
 
    <div> 
 
     <a> 
 
     <div> 
 
      <div>Leave Untouched</div> 
 
     </div> 
 
     </a> 
 
    </div> 
 
    </div> 
 
</div>

+0

@ Yoshi спасибо, я думаю, это должно быть 'nav_adv' вместо' this'. Хотя я в основном пишу код в jQuery. – Jai

+0

И 'nav_adv' не будет иметь метод' filter'. – CodingIntrigue

+0

Я только что проверил это с более чем 8 пунктами, это кажется крахом .. – Neil

Смежные вопросы