Substr 从一个字符或另一个字符开始
Substr starting at one character OR one other character
我有一个函数接受一个参数并且需要return那个参数作为它原始字符串的子串:
var $ = function (selector) {
var elements = [];
var selectorSubstr = selector.substr(selector.lastIndexOf(".") || selector.lastIndexOf("#") + 1);
return selectorSubstr;
};
参数都是html个元素:
$("div")
=> "div"
&
$("img.some_class")
=> "some_class"
&
$("div.some_class#some_id")
=> "some_id"
&
$("div#some_id.some_class")
=> "some_class"
我需要 lastIndexOf 从“.”的最后一个实例开始html class 或 html id 的“#”。
目前 lastIndexOf 仅适用于第一个参数并且不考虑'||' for ' 或其他参数。
有什么建议吗?
对于像这样的问题和许多其他像 lodash 这样的库会非常方便。他们将为您节省大量时间。例如,lastIndexOf 的 link 支持一个 fromIndex 来告诉它从哪里开始等。
你也可以很容易地在你的情况下做到这一点,但在一天结束时你会 运行 有很多其他类似的问题,其中 1 个函数调用 lodash 会解决它,最好只是将它添加为您的工具带 imo 的一部分。
总是第一个条件为真,因为两个选择器都有 .
,因此最后一个索引总是在第一个条件中定义。
var classSelector = selector.lastIndexOf('.')? -1 : selector.lastIndexOf('.');
var idSelector = selector.lastIndexOf('#')? -1: selector.lastIndexOf('#');
if(idSelector>classSelector)
selector.subStr(idSelector+1);
else
selector.subStr(classSelector+1);
var $ = function (selector) {
return selector.match(/[#\.][^\.#]+$/);
}
$("img.some_class")[0]; // ==> '.some_class'
$("div.some_class#some_id")[0]; // ==> #some_id
$("asbasifhwaehf"); // ==> null, no match
编辑:解决@Joe 的要求,我对 return 整个输入字符串进行编辑,以防它不包含 # 或 .
var $ = function (selector) {
var arr = selector.match(/[#\.][^\.#]+$/);
return arr ? arr[0] : selector
}
$("img.some_class"); // ==> '.some_class'
$("div.some_class#some_id"); // ==> '#some_id'
$("asbasifhwaehf"); // ==> 'asbasifhwaehf', no match
获取不带 .或者#前缀,调用
$("div.some_class#some_id").slice(1); // ==> 'some_id'
您也可以在函数中使用 return arr ? arr[0].slice(1) : selector
,但是您无法仅从 return 值
我有一个函数接受一个参数并且需要return那个参数作为它原始字符串的子串:
var $ = function (selector) {
var elements = [];
var selectorSubstr = selector.substr(selector.lastIndexOf(".") || selector.lastIndexOf("#") + 1);
return selectorSubstr;
};
参数都是html个元素:
$("div")
=> "div"
&
$("img.some_class")
=> "some_class"
&
$("div.some_class#some_id")
=> "some_id"
&
$("div#some_id.some_class")
=> "some_class"
我需要 lastIndexOf 从“.”的最后一个实例开始html class 或 html id 的“#”。
目前 lastIndexOf 仅适用于第一个参数并且不考虑'||' for ' 或其他参数。
有什么建议吗?
对于像这样的问题和许多其他像 lodash 这样的库会非常方便。他们将为您节省大量时间。例如,lastIndexOf 的 link 支持一个 fromIndex 来告诉它从哪里开始等。
你也可以很容易地在你的情况下做到这一点,但在一天结束时你会 运行 有很多其他类似的问题,其中 1 个函数调用 lodash 会解决它,最好只是将它添加为您的工具带 imo 的一部分。
总是第一个条件为真,因为两个选择器都有 .
,因此最后一个索引总是在第一个条件中定义。
var classSelector = selector.lastIndexOf('.')? -1 : selector.lastIndexOf('.');
var idSelector = selector.lastIndexOf('#')? -1: selector.lastIndexOf('#');
if(idSelector>classSelector)
selector.subStr(idSelector+1);
else
selector.subStr(classSelector+1);
var $ = function (selector) {
return selector.match(/[#\.][^\.#]+$/);
}
$("img.some_class")[0]; // ==> '.some_class'
$("div.some_class#some_id")[0]; // ==> #some_id
$("asbasifhwaehf"); // ==> null, no match
编辑:解决@Joe 的要求,我对 return 整个输入字符串进行编辑,以防它不包含 # 或 .
var $ = function (selector) {
var arr = selector.match(/[#\.][^\.#]+$/);
return arr ? arr[0] : selector
}
$("img.some_class"); // ==> '.some_class'
$("div.some_class#some_id"); // ==> '#some_id'
$("asbasifhwaehf"); // ==> 'asbasifhwaehf', no match
获取不带 .或者#前缀,调用
$("div.some_class#some_id").slice(1); // ==> 'some_id'
您也可以在函数中使用 return arr ? arr[0].slice(1) : selector
,但是您无法仅从 return 值