Как вызвать closest () для первого элемента, выбранного querySelectorAll в пользовательской цепочке JavaScript библиотеки? - PullRequest
1 голос
/ 30 октября 2019

Что именно не так в моей попытке вызвать closest() для первого элемента, выбранного querySelectorAll в моей пользовательской библиотеке JavaScript?

var $ = function(selector){

  var x; 
  var obj = {
  
    myLib(selector){
      return x || document.querySelectorAll(selector);
    },
    
    cl(selector){
      x[0].closest(selector);
      return this;
    },
      
    style(aaa,bbb){
           !aaa && !bbb ? x.getAttribute('style')                         :
            aaa &&  bbb ? x.forEach( zzz => { zzz.style[aaa]=bbb;     } ) :
      aaa.includes(';') ? x.forEach( zzz => { zzz.style.cssText+=aaa; } )
                        : getComputedStyle(x,null)[aaa];
      return this;
    },
      
  };
        
  x = obj.myLib(selector);
  return obj;
  
};

// now i want to call it

$('div').style('background','#FFFF00');
$('.kilo').cl('.uniform').style('color:','#880088');
<div id="foxtrott">
  foxtrott
  <div class="uniform">
    uniform
    <div class="charlie">
      charlie
      <div class="kilo">
        kilo
      </div>
    </div>
  </div>
</div>

Когда я изменяю свою функцию cl () на это, консоль говорит мне: $(...).cl(...) is null

cl(selector){
  return x[0].closest(selector);
},

Я действительно неполучить это, как сделать это правильно. (

1 Ответ

1 голос
/ 30 октября 2019

Вы не устанавливаете x в cl.

, т. Е.

    cl(selector) {
      x = [x[0].closest(selector)];
      return this;
    },

Также следует отметить, что вы хотите сбросить двоеточие в конце на 'border-left:' (РЕДАКТИРОВАТЬ: или 'color:' в вашей последней редакции)

Вот "рабочий" пример https://repl.it/repls/MixedRipeGlobalarrays

...