[英]Get element by id with regex
我对RegEx有一个快速的问题...
我有一个类似于以下内容的字符串 :
"This was written by <p id="auth">John Doe</p> today!"
我想做的(使用javascript)基本上是从ID为“ auth”的任何标签中提取“ John Doe”。
谁能给我一些启示? 我很抱歉问。
全文:我正在使用XML解析器将数据从提要中传递到变量中。 但是,XML文档()中有一个标签,其中包含传递给字符串的HTML。 看起来像这样:
<item>
<title>This is a title</title>
<description>
"By <p id="auth">John Doe</p> text text text... so on"
</description>
</item>
如您所见,我不能对该p标签使用HTML / XML解析器,因为它在字符串中,而不是文档中。
无需正则表达式即可执行此操作。 请改用DOM。
var obj = document.getElementById('auth');
if (obj)
{
alert(obj.innerHTML);
}
顺便说一句,在同一页面中具有相同值的倍数id
是无效的(并且肯定会导致奇怪的JS行为)。
如果要在同一页面上进行多次auth
,请使用class
而不是id
。 然后,您可以使用类似:
//IIRC getElementsByClassName is new in FF3 you might consider using JQuery to do so in a more "portable" way but you get the idea...
var objs = document.getElementsByClassName('auth');
if (objs)
{
for (var i = 0; i < objs.length; i++)
alert(obj[i].innerHTML);
}
编辑:由于您想解析包含一些HTML的字符串,您将无法使用我的答案as-iis。 您的HTML字符串会包含整个HTML文档吗? 有一部分吗 有效的HTML吗? 部分(损坏的)HTML?
这是一种使浏览器为您执行HTML解析的方法:
var string = "This was written by <p id=\"auth\">John Doe</p> today!";
var div = document.createElement("div");
div.innerHTML = string; // get the browser to parse the html
var children = div.getElementsByTagName("*");
for (var i = 0; i < children.length; i++)
{
if (children[i].id == "auth")
{
alert(children[i].textContent);
}
}
如果使用类似jQuery的库,则可以隐藏for循环,并使用跨浏览器的东西来替换textContent
的使用。
也许像
document.getElementById("auth").innerHTML.replace(/<^[^>]+>/g, '')
可能有用。 所有现代浏览器均支持innerHTML。 (如果您不关心从内部内容中删除HTML位,则可以省略替换。)
如果您可以使用jQuery,请执行
$("#auth").text()
我想做的(使用javascript)基本上是从ID为“ auth”的任何标签中提取“ John Doe”。
你不能有相同的ID( auth
为一个以上的元素)。 每个页面每个元素应分配一次ID。
但是,如果您将auth
类分配给元素,则假设我们正在处理段落元素,则可以执行以下操作:
// find all paragraphs
var elms = document.getElementsByTagName('p');
for(var i = 0; i < elms.length; i++)
{
// find elements with class auth
if (elms[i].getAttribute('class') === 'auth') {
var el = elms[i];
// see if any paragraph contains the string
if (el.innerHTML.indexOf('John Doe') != -1) {
alert('Found ' + el.innerHTML);
}
}
}
如果标记的内容仅包含文本,则可以使用以下方法:
function getText (htmlStr, id) {
return new RegExp ("<[^>]+\\sid\\s*=\\s*([\"'])"
+ id
+ "\\1[^>]*>([^<]*)<"
).exec (htmlStr) [2];
}
var htmlStr = "This was written by <p id=\"auth\">John Doe</p> today!";
var id = "auth";
var text = getText (htmlStr, id);
alert (text === "John Doe");
假设每个字符串仅具有1个auth
,则可能需要这样的命令:
var str = "This was written by <p id=\"auth\">John Doe</p> today!",
p = str.split('<p id="auth">'),
q = p[1].split('</p>'),
a = q[0];
alert(a);
很简单。 在段落上分割字符串,然后在段落上分割第二部分,结果的第一部分将成为您的值。 每次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.