我有一些数据需要查询以找到最佳匹配。所以我在函数内部传递了el
(数据)。
function match(el) {
return el.find('link:regex(type,application\\/(atom|rss)\\+xml)').attr('href')
|| el.find('meta[name="msapplication-task"]').attr('content').match(/action-uri=(.*?);/)[1]
|| [another query]
|| [another query]
|| [last resort query]
}
使用||
运算符时遇到的问题是,如果任何一个查询导致错误,操作将退出,并且后面的查询都不会匹配。例如,第二个查询可能会失败,因为match
上没有undefined
方法,如果没有找到值。
我目前已在try
语句中包含此函数调用以捕获这些错误,但这并不能解决我的问题。我需要捕获每个查询的错误,或其他东西,以允许其余的查询运行。
我正在寻找一种优雅的解决方案来针对这些数据运行一组查询。要匹配的第一个查询应该是返回值。
答案 0 :(得分:1)
这样的事情会好吗?必须检查返回值和所有...
参见jsFiddle:http://jsfiddle.net/vGd46/2/
编辑:大致使用jQuery
var queries = [
function(el){return el.find('link:regex(type,application\\/(atom|rss)\\+xml)').attr('href')},
function(el){return el.find('meta[name="msapplication-task"]').attr('content').match(/action-uri=(.*?);/)[1]}
];
function match(el) {
var l = queries.length,
m = false; // match
while(-1 < --l && !m){
try{
m = queries[i](el);
} catch(err) {
alert(err);
// handle
}
}
return m;
}
var el = document.createElement("meta");
el.setAttribute('name','msapplication-task');
el.setAttribute('content','action-uri="one";action-uri="two";');
alert(match($('<div/>').append(el)));
编辑:循环前进(小提琴:http://jsfiddle.net/vGd46/3/)
function match(el) {
var l = queries.length,
i = -1,
m = false; // match
while(++i < l && !m){
try{
m = queries[l](el);
} catch(err) {
alert(err);
// handle
}
}
return m;
}