Получить значение конкретного атрибута данных ближайшего элемента, связанного с ним, дает TypeError - PullRequest
0 голосов
/ 31 октября 2019

В моей библиотеке я хочу написать небольшую функцию для closest() и особенно получить значение определенного data-attribut ближайшего элемента, потому что в моем приложении мне нужно использовать это очень часто. : D

Но мне только консоль сообщает:

TypeError: x.getAttribute не является функцией

var $ = function(s) {
  var x;
  var obj = {
    myLib(s) {
      return x || querySelectorAll(s);
    },
    myFunction(s) {
      if (s.startsWith('data-')) { // in this block is sth. wrong
        x = [x[0].closest('*["' + s + '"]')];
        return x.getAttribute(s);
      } else {
        x = [x[0].closest(s)];
        return this;
      }
    }
  };
  x = obj.myLib(s);
  return obj;
};

////////// usage examples

// get the value of attribute "data-wrestler"
var dv = $('.kilo').myFunction('data-wrestler');
console.log(dv);

// select the closest element by selector
var ce = $('.kilo').myFunction('.uniform');
console.log(ce);

// would select the closest element with specific data-attribut by selector
var da = $('.kilo').myFunction('*["data-wrestler"]');
console.log(da);
<div id="foxtrott">
  foxtrott
  <div class="uniform" data-wrestler="hulkster">
    uniform
    <div class="charlie">
      charlie
      <div class="kilo">
        kilo
      </div>
    </div>
  </div>
</div>

1 Ответ

0 голосов
/ 31 октября 2019
  1. Цитаты [data-wrestler] - удалить их x = [x[0].closest('[' + s + ']')];

  2. Вы используете document.querySelectorAll - возвращает коллекцию, поэтому вам нужно использовать [0]

    вернуть x [0] .getAttribute (s);

или изменить на document.querySelector

...