Javascript 如何重构此代码以使用jQuery?
如何重构此代码以使用jQueryJavascript 如何重构此代码以使用jQuery?,javascript,jquery,Javascript,Jquery,如何重构此代码以使用jQuery function emleProcessOnLoad(aThis) { var result = document.evaluate("//span[@class='emleOnLoad']", aThis.document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var jj=0; jj<result.snapshotLength; jj++){ e
function emleProcessOnLoad(aThis) {
var result = document.evaluate("//span[@class='emleOnLoad']",
aThis.document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (var jj=0; jj<result.snapshotLength; jj++){
eval("var emleThis=result.snapshotItem(jj);" + result.snapshotItem(jj).textContent);
}
}
附于:
var emleThis=result.snapshotItem(jj);
然后对
.evaluate()
函数找到的每个项执行。主循环可以简化为
$("span.emleOnLoad").each(function() {
var content = $(this).text();
// do something with content
});
但整个想法需要重新思考。将javascript块存储在spans中,并在运行时对其进行求值-这很奇怪。您不需要jQuery来实现这一点,但我会用以下内容替换此开关:
var lu = (function() {
var TYPES = { // call it whatever you want
'xhtml':'http://www.w3.org/1999/xhtml',
'math': 'http://www.w3.org/1998/Math/MathML',
'svg': 'http://www.w3.org/2000/svg'
};
return function luf(aPrefix){
return TYPES[aPrefix] || '';
};
})();
首先,我创建一个匿名函数并调用它,这样我就可以声明局部变量,否则TYPES
将最终进入(大概)全局范围。然后我创建一个对象(map/hash),它像开关一样映射值。最后,创建另一个匿名函数,该函数在类型中查找前缀,并默认为“”
其余的都搞砸了。是的。extremelu很奇怪,但他说这是数学的东西,所以显示被评估的部分很可能是一个特性。危险的一点:)在这里使用eval没有任何好处。不管它是不是“数学素材”。只需要添加上下文节点,aThis.document
。Eval是邪恶的!在使用eval时要非常小心,尤其是当您的源代码不可信时。当前的工作是使用jQuery重构Emle,此时已将LoC降低了30%。我已经在Emle项目中添加了Eval Is Evil blueprint:另一方面,如果源是可信的,那么Eval本身就没有问题。将问题的名称空间组件移动到:
var lu = (function() {
var TYPES = { // call it whatever you want
'xhtml':'http://www.w3.org/1999/xhtml',
'math': 'http://www.w3.org/1998/Math/MathML',
'svg': 'http://www.w3.org/2000/svg'
};
return function luf(aPrefix){
return TYPES[aPrefix] || '';
};
})();