Свой querySelector не работает как надо

212
30 ноября 2018, 04:50

Есть html:

<table id="table"><template></template></table>

Я задал такую конструкцию:

function gId(id){return document.getElementById(id)}
Node.prototype.qS = function(s){return this.querySelector(s)}

В коде пишу:

var t=gId('table');
console.log(t.qS("template"));

выдает ошибку:

TypeError: t.qS is not a function

где я ошибаюсь?

Answer 1

не стоит модифицировать Node или Object.
лучше написать вот так:

function gId(id) { 
  let el = document.getElementById(id); 
  if (el && !el.qS) el.qS = qS.bind(el) 
  else throw new Error('что-то не так') 
  return el 
} 
 
function qS(s) { 
  return this.querySelector(s) 
} 
 
const t = gId('table'); 
console.log(t.qS("template"));
<table id="table"><template></template></table>

Answer 2

Объекты DOM с точки зрения javascript являются exotic object. В них некоторые языковые механизмы могут отсутствовать или работать странно в зависимости от браузера.

Если вам важна поддержка всех браузеров - то придется использовать другие механизмы. Например, можно обойтись обычной функцией:

function qS (el, selector) {
    return el.querySelector(selector);
}

Или же можно сделать свой класс-обертку.

READ ALSO
Сортировка datatable в формате min/max

Сортировка datatable в формате min/max

Всем привет, у меня затык с одним делом Мне с бека приходит информация о цене в формате min/max И как бы надо сделать сортировку по этому полю,...

159
Не работает скрипт в модальном окне

Не работает скрипт в модальном окне

Мне нужно сделать анимацию в модальном окне, которое появляется при клике на кнопкуВ приведенном ниже коде, есть пример рабочей анимации

174
не работает плагин owl-carousel

не работает плагин owl-carousel

Всем здравствуйте! Нужна помощьЕсть модальное окно (#pop-up), которое появляется при клике на кнопку

164
Вывести циклом vue.js

Вывести циклом vue.js

Всем привет,ребят,немного глупый вопрос но как такую конструкцию вывести циклом,чтобы постоянно не дублировать код)

171