我目前正在尝试查找DOM-String的第一个“元素”的类名。 它根本就没有DOM,它只是特定DOM元素的字符串。
示例:
var test = '<div class="a_classname a_2nd_classname">[OTHER DOM ELEMENTS HERE]</div>';
我的问题是在完成加载之前我不知道var的内容(它是一个ajax响应)。所以它必须通过regexp绝对动态,我需要该var中第一个元素的整个类名。
我已经用Google搜索了,但没有解决我的问题。
欢迎任何建议:)
很多答案 0 :(得分:0)
如果您在代码中使用它,可以使用jquery执行此操作
$('<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"
答案 1 :(得分:0)
确保,test包含html:
if(/ ^&lt;。+&gt; $ / .test(test))
然后,在它上面调用$():
var tempHtml = $(test);
它将解析您可以通过jQuery或直接查询的标记:
var firstElementClassNames = tempHtml [0] .className.split('');
答案 2 :(得分:0)
此正则表达式将捕获字符串中第一个div
标记的类名。表达式确实需要选项s
和m
来匹配所有行,而点匹配新行字符。
\A.*?<div\b(?=\s)(?=(?:(?![^>])'[^']*'|"[^"]*"|.)*\sclass="([^"]*)")
如果您不知道具有class属性的第一个元素名称,则可以通过将标记名称替换为\w+
来修改表达式。捕获组0将包含标记名称和左括号:
``\ A &LT; \ W + \ B(?= \ S)(=(([^&GT;]) '[^'] '| “[^”]的 “|。) \的sclass =”([^ “] *)”)`
输入示例文字
<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
)
)