2016-06-26 59 views
0

我有一個需要參數和需要返回參數作爲它的一個子功能的原始字符串:SUBSTR開始在一個字符或一個其他角色

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類或者對於html id來說'#'。

目前lastIndexOf只適用於第一個參數,並沒有考慮到'||'爲'或其他論點。

有什麼建議嗎?

+0

不幸的是我不能使用任何庫來解決這個問題。 – Joe

回答

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 

編輯:解決@喬的要求,我讓這個編輯返回整個輸入字符串的情況下,它不包含#或。

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,但你沒有辦法知道它是一個類或ID或整個字符串(不區分大小寫)剛剛從返回值

+0

謝謝,儘管對答案進行簡要解釋總是很有幫助。 – Joe

+0

line'selector.match(/[#\.][^\.#]+$/)'搜索正則表達式的輸入字符串(選擇符)'/[#\.][^\.#]+ $ /'。這個正則表達式意味着搜索一個子字符串: - 以#或者#開頭。 ([#\。]部分) - 必須由一個或多個既不是#也不是#的字符繼續。 ([^ \。#] +部分) - 子字符串必須位於輸入的末尾($符號末尾) –

+0

輝煌,謝謝。 – Joe

1

對於像這些和其他許多圖書館的問題,如lodash來得非常方便。他們將爲您節省大量時間。例如lastIndexOf的鏈接支持fromIndex來告訴它從哪裏開始等等。

你可以很容易地在你的情況下做到這一點,但在一天結束時,你會運行許多其他類似的問題1函數調用lodash可以解決這個問題,只需將它添加爲工具帶imo的一部分即可。

+0

謝謝,不幸的是我不能使用庫來解決這個問題。儘管如此,我仍然會檢查它。 – Joe

2

總是第一個條件成立,因爲兩個選擇器都有.,因此最後一個索引始終在第一個條件中定義。

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); 
+0

啊,當然,謝謝!我也有其他的方法,編輯的問題包括這一點。 – Joe

+0

獲取字符串末尾的選擇器是您的要求。例如:**。some_class **,**#some_class **,**。some_class ** –

+0

是的,選擇器在字符串的末尾沒有'#'或'。'。 – Joe

相關問題