2013-06-24 30 views
1

我目前正在嘗試查找DOM字符串的第一個「元素」的類名。 它根本沒有DOM,它只是一個特定DOM元素的字符串。JS正則表達式類名第一個元素

例子:

var test = '<div class="a_classname a_2nd_classname">[OTHER DOM ELEMENTS HERE]</div>'; 

我的問題是我不知道的VAR的內容(這是一個Ajax響應)之前完成加載。所以它必須通過regexp完全動態化,我需要該變種中第一個元素的整個類名。

我搜索了一下,但沒有解決我的問題。

任何建議都是歡迎的。

THX很多

+1

特別是如果它是一個ajax響應,它應該不會很難*使它成爲一個DOM。只需獲得'responseXML'而不是'responseText'。 – Bergi

回答

0

你可以,如果你在你的代碼

$('<div class="a_classname a_2nd_classname"><a class="foo">bar<a>[OTHER DOM ELEMENTS HERE]</div>').attr("class") 

或者使用的DOMParser

var xmlString = '<div class="a_classname a_2nd_classname"><a class="foo">bar<a>[OTHER DOM ELEMENTS HERE]</div>'; 
var parser = new DOMParser() ; 
var doc = parser.parseFromString(xmlString, "text/xml"); 
doc.firstChild.className // => "a_classname a_2nd_classname" 
使用它與jQuery做到這一點
+0

嗨,噢,DOMParser看起來不錯...但它不是重要的類像名稱這樣的事情? –

0
  1. 確認,測試包含HTML:

    如果(。。/^< +> $ /測試(測試))

  2. 然後,調用$()在其:

    VAR tempHtml = $ (測試);

  3. 它將分析而這可通過jQuery的或直接查詢標記:

    變種firstElementClassNames = tempHtml [0] .className.split(」「);

+0

嗨Andrevsinky,對不起,我忘了說我不想使用jQuery。 但是,謝謝:) –

0

說明

這個正則表達式將捕獲的字符串中的第div標籤的類名。該表達式需要選項sm用於匹配所有行,點匹配換行符。

\A.*?<div\b(?=\s)(?=(?:(?![^>])'[^']*'|"[^"]*"|.)*\sclass="([^"]*)")

enter image description here

如果你不知道用類屬性的第一個元素的名字,那麼你可以用\w+更換標籤名稱修改表達式。捕獲組0將包含標籤名稱和開頭括號:

``\ A。 ? (?= \ s)(?=(?:(?![^>])'[^']'|「[^」] 「|。) \的sclass = 「([^」] *)「)`

JavaScript示例

輸入樣本文本

<div class="a_classname a_2nd_classname">[OTHER DOM ELEMENTS HERE]</div> 

代碼

<script type="text/javascript"> 
    var re = /\A.*?<div\b(?=\s)(?=(?:(?![^>])'[^']*'|"[^"]*"|.)*\sclass="([^"]*)")/; 
    var sourcestring = "source string to match with pattern"; 
    var results = []; 
    var i = 0; 
    for (var matches = re.exec(sourcestring); matches != null; matches = re.exec(sourcestring)) { 
    results[i] = matches; 
    for (var j=0; j<matches.length; j++) { 
     alert("results["+i+"]["+j+"] = " + results[i][j]); 
    } 
    i++; 
    } 
</script> 

相配

$matches Array: 
(
    [0] => Array 
     (
      [0] => <div 
     ) 

    [1] => Array 
     (
      [0] => a_classname a_2nd_classname 
     ) 

) 
+0

嗨,這看起來很棒。我會盡快嘗試(目前不在電腦上)...... THX很多 –