我有一个字符串trackingObj
,它存储了一组信息。(HTML代码,但代码中有许多字符,如\r\n
,例如:
<div id=\"MainBox\">\r\n
我想从这个巨大的字符串中获取以下内容:
<td id='theTrackInfo'><strong><span id='HeaderNum'>aaa</span><span id='HeaderFrom'> <br>bbb</span><span id='HeaderDes'> <br>ccc</span><span id='HeaderItem'> <br>ddd</span><span id='HeaderState'> <br>eee</span><span id='HeaderADate'><br>fff</span><span id='HeaderSign'><br>ggg</span><DIV id='HeaderExtra'> </DIV></strong></td>
我尝试使用html()将整个字符串附加到DOM,但是里面有非法字符,所以我无法使用jQuery来执行DOM操作。
只考虑使用纯正则表达式来获得我需要的东西。我试过以下:
var Info = new RegExp("<td>\sid='theTrackInfo'>[\s\S]*?\/td>", "g");
var InfoHtml = theTrackInfo.exec(trackingObj);
console.log(InfoHtml);
我也尝试过:
var InfoHtml = trackingObj.match(/<td>\sid='theTrackInfo'>[\s\S]*?<\/td>/gi);
console.log(InfoHtml);
不起作用。我缺少什么?
================= UPDATE ==========================
大家好,谢谢你的所有答案。
我尝试使用DOMParser使其最终运行:
var parser = new DOMParser();
var html = parser.parseFromString(ProcessedStrings,"text/html");
var info = $(html).find("#theTrackInfo");
console.log($(info).html());
有人可能会说jQuery应该做同样的事情。
问题是,trackingObj
是通过使用ajax调用来检索的,当我尝试使用jQuery append方法时,它附加到DOM,在控制台中,它说:“意外的令牌ILLEGAL”
但我仍然会选择一个正则表达式的答案作为这个问题的正确答案。
================== update 2 ============
嗨,我检查了Tom Fenech的方法,它也适用于我。 可能是因为尝试将代码附加到div而导致错误。 与jQuery本身无关。
答案 0 :(得分:1)
如果你已经在使用jQuery,你可以将你的字符串解析为HTML,然后提取你感兴趣的部分:
var trackingObj = "<table><tbody><tr><td id='theTrackInfo'><strong><span id='HeaderNum'>aaa</span><span id='HeaderFrom'> <br>bbb</span><span id='HeaderDes'> <br>ccc</span><span id='HeaderItem'> <br>ddd</span><span id='HeaderState'> <br>eee</span><span id='HeaderADate'><br>fff</span><span id='HeaderSign'><br>ggg</span><DIV id='HeaderExtra'> </DIV></strong></td><tr></tbody><table>";
var html = $.parseHTML(trackingObj);
var td = $(html).find('#theTrackInfo').get()[0]; // get native DOM element
console.log(td.outerHTML);
答案 1 :(得分:0)
几个问题:
首先,&#34; id&#34;在开始标记内...所以你的尝试应该是:
var Info = new RegExp("<td\sid='theTrackInfo'>[\s\S]*?<\/td>", "g");
其次,如果你在其中嵌入了另一个表,它将无法获得正确的数据。
我会考虑使用像Html Agility Pack这样的工具来获取你想要的东西。