如何重构此代码以使用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++){
eval("var emleThis=result.snapshotItem(jj);" + result.snapshotItem(jj).textContent);
}
}
jQuery似乎有四个问题需要解决:
aThis.document
//span[@class='emleOnLoad']
for (var jj=0; jj<result.snapshotLength; jj++)
.textContent
代码是来自Emle - Electronic Mathematics Laboratory Equipment JavaScript文件emle_lab.js的片段。
.evaluate()
函数会抓取所有<span>
个具有类emleOnLoad
的标记。生成的文本内容包含表达式片段,例如:
emleHandleInput(emleThis.parentNode.parentNode,"EMLE_CET_PROPER_FRACTION");
附加到:
var emleThis=result.snapshotItem(jj);
然后对.evaluate()
函数找到的每个项执行。
答案 0 :(得分:1)
答案 1 :(得分:0)
你不需要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),它就像你的开关那样映射值。最后,创建另一个匿名函数,该函数在TYPES
中查找前缀,默认为''。
剩下的就搞砸了。