2017-01-10 4 views
-1

Я хотел бы подытожить некоторые функции JavaScript. Например:обобщить функции в js

document.getElementByClassName("lamp")[0]; == selector(".lamp")[0]; 

В этом примере я не проблема, моя проблема заключается в следующем коде:

selector(".lamp")[0].selector(".school")[1].style.color = "red"; 

, когда я запускаю этот код консоли говорит:

Uncaught TypeError: selector(...)[0].selector is not a function(…)

и это это моя функция выбора:

function selector(string){ 
    switch (string[0]) { 
    case '#': 
     string = string.replace('#',''); 
     return document.getElementById(string); 
     break; 
    case '.': 
     string = string.replace('.',''); 
     return document.getElementsByClassName(string); 
     break; 
    case '<': 
     string = string.replace('<',''); 
     return document.getElementsByTagName(string); 
     break; 
    case '?': 
     string = string.replace('?',''); 
     return document.getElementsByName(string); 
     break; 
    default: 
     console.log('i cant select it --by selector.js--'); 
    } 
} 

Что мне делать?

+0

Почему бы не использовать библиотеку выбора типа [SizzleJS] (https://sizzlejs.com /)? –

+0

Ваш 'selector' уже встроен в браузеры, он называется' querySelector' – georg

+0

. Ваша функция возвращает что-то вроде NodeList или Element, эти классы не имеют метода «selector». Вот почему цепочка не работает. Поэтому вы должны вернуть что-то, у которого есть член «селектор». (Вы могли бы использовать механизм прототипа, но я бы не рекомендовал этого.) – bert

ответ

0

вы должны использовать прототип:

function selector(string){ 
 
    switch (string[0]) { 
 
    case '#': 
 
     string = string.replace('#',''); 
 
     return document.getElementById(string); 
 
     break; 
 
    case '.': 
 
     string = string.replace('.',''); 
 
     return document.getElementsByClassName(string); 
 
     break; 
 
    case '<': 
 
     string = string.replace('<',''); 
 
     return document.getElementsByTagName(string); 
 
     break; 
 
    case '?': 
 
     string = string.replace('?',''); 
 
     return document.getElementsByName(string); 
 
     break; 
 
    default: 
 
     console.log('i cant select it --by selector.js--'); 
 
    } 
 
} 
 
Object.prototype.selector = function(){ 
 
    switch (string[0]) { 
 
    case '#': 
 
     string = string.replace('#',''); 
 
     return document.getElementById(string); 
 
     break; 
 
    case '.': 
 
     string = string.replace('.',''); 
 
     return document.getElementsByClassName(string); 
 
     break; 
 
    case '<': 
 
     string = string.replace('<',''); 
 
     return document.getElementsByTagName(string); 
 
     break; 
 
    case '?': 
 
     string = string.replace('?',''); 
 
     return document.getElementsByName(string); 
 
     break; 
 
    default: 
 
     console.log('i cant select it --by selector.js--'); 
 
    } 
 
};

этот код работать правильно без ошибок

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