2016-07-14 12 views
1

ich eine Funktion haben, die ich will von jQuery entfernen:wie entfernen jquery Filter aus Funktion

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

Ich versuche, diese Funktion mit Vanille zu umschreiben Javascript. das ist, was ich bisher aber es funktioniert nicht

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(); 
     }; 
    } 

Ich vermute, dass das jQuery-Selektor Verhalten als document.getElementsByTagName ist etwas anders, aber ich habe wirklich keine Ahnung, was los ist. Jede Hilfe würde sehr geschätzt werden. Danke

+0

var elem = arr [i] .getAttribute ('href'); Ruft den Attributwert 'href' für jedes Element ab. Sie versuchen dann, dem zurückgegebenen Wert einen Click-Handler zuzuweisen. – bwyn

+0

Regel # 1: Einfach etwas zu sagen "funktioniert nicht" ist keine gute Möglichkeit, eine Frage zu stellen. Gibt es einen Fehler? Was ist das erwartete vs. tatsächliche Verhalten? – david

Antwort

2

besser verwenden querySelectorAll() anstelle von getElementsByTagName(), abgesehen davon, denke ich, dass der Code selbsterklärend ist. Fragen Sie, ob etwas unklar ist

//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); 
}) 

oder so:

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