2016-07-14 2 views
1

에서 JQuery와 필터를 제거하는 방법 : 나는 바닐라 자바 ​​스크립트를 사용하여이 기능을 다시하려고내가에서 jQuery를 제거 할 함수가 어떻게 기능

var hunt = new RegExp(action.search); 
$('a').filter(function() { 
    return hunt.test(this.href); 
}).click(doStuff); 

합니다. 이것은 내가 지금까지 가지고 있지만 그것이 내가 jQuery를 선택 동작은 document.getElementsByTagName보다 약간 다르지만 정말 무슨 일이 일어나고 있는지 전혀 모르는 추측하고

var hunt = new RegExp(action.search); 
    var aSelector = document.getElementsByTagName('a'); 
    var arr = Array.prototype.filter.call(aSelector, function(el){ 
     return hunt.test(el.href) 
    }); 
    for(var i=0; i<arr.length; i++){ 
     var elem = arr[i].getAttribute('href'); 
     elem.onclick = function(){ 
      doStuff(); 
     }; 
    } 

를 작동하지 않는 것입니다. 어떤 도움이라도 대단히 감사하겠습니다. 감사합니다

+0

var에 ELEM의 =의 편곡 [I] .getAttribute ('HREF'); 각 요소에 대해 'href'속성 값을 가져옵니다. 그런 다음 클릭 처리기를 반환 된 값에 할당하려고합니다. – bwyn

+0

규칙 # 1 : 단순히 "작동하지 않습니다"라고 말하면 질문을 작성하는 좋은 방법이 아닙니다. 오류가 있습니까? 기대되는 행동과 실제적인 행동은 무엇입니까? – david

답변

2

getElementsByTagName() 대신 querySelectorAll()을 사용하는 것이 좋습니다. 그 외에 코드 자체가 설명하는 것 같습니다. 뭔가

//a very basic utility to fetch Nodes by css-selectors and return them as an Array 
//- shorthand for document.querySelectorAll() 
//- document.querySelectorAll() returns a NodeList wich lacks the Array-methods 
//- second argument to provide a Node as the context of the query 
function $$(selector, context){ 
    return Array.from((typeof context === "object" && context || document).querySelectorAll(selector)); 
} 

//now we can use the regular Array-methods 
$$('a').filter(function(node){ 
    return hunt.test(node.href); 
}).forEach(function(node){ 
    node.addEventListener("click", doStuff); 
}) 

불분명하거나 이런 식으로하면 질문

$$('a').forEach(function(node){ 
    if(hunt.test(node.href)){ 
     node.addEventListener("click", doStuff); 
    } 
});