[英]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.