我想分析一些html代碼並將其分解爲一組對象。將一些html代碼拆分爲對象數組
下面是一些例子的html代碼:
<slide data-time=5>
<div class="cds-block-title">Master Calendar</div>
<div class="cds-block-content">iframe to master calendar</div>
</slide>
<slide data-time=5>
<div class="cds-block-title">Weather</div>
<div class="cds-block-content">iframe to master Weather App</div>
</slide>
我的目標是把它分解成類似這樣的對象:
[
{
"html":"<slide.....</slide>",
"time":"5",
"title":"Master Calendar",
"content":"iframe...."
},
{
"html":"<slide.....</slide>",
"time":"5",
"title":"Master Calendar",
"content":"iframe...."
}
]
我已經嘗試了幾種不同的方法。 使用正則表達式(這工作在我的測試,但不是當我把它放在生產,.match停止工作如預期,我也讀了幾篇文章說,使用正則表達式來解析HTML代碼是不是最好的辦法):
function splitSlidesHtml(html){
var html = '<slide data-time="5"><div class="cds-block-title">Activities & Sports</div><div class="cds-block-content">content</div></slide><slide data-time="5"><div class="cds-block-title">weather</div><div class="cds-block-content">content</div></slide>"';
var slides = html.match(/<slide.*?>(.*?)<\/slide>/g);
var slidesA = [];
if (!slides) {
slidesA.push({"html":html});
} else {
for (i in slides){
var c = {};
c.html = slides[i];
c.time = slides[i].match(/(data-time=)(.*?)>/)[2].replace(/['"]+/g, ''); // extract the time, and replace any quotes that might be around it
c.title = slides[i].match(/<div class="cds-block-title">(.*?)<\/div>/)[1];
c.content = slides[i].match(/<div class="cds-block-content">(.*?)<\/div>/)[1];
slidesA.push(c);
}
}
return slidesA;
} // end splitSlidesHtml
我也嘗試過使用jQuery,這種類型的工作,但我不知道parseHTML知道如何確保它在不同的幻燈片中打破。
var slides = $.parseHTML(html);
console.log(slides);
console.log(slides[0].innerHTML);
console.log(slides[0].outerHTML);
首先,[不要使用正則表達式](http://stackoverflow.com/a/1732454/1810460)。其次,如果你的HTML由於某種原因在字符串中而不是在DOM中,你只想使用'parseHTML'。如果是這樣的話,你應該可以做一些像'slides.children('slide')。each(function(slide){})'以便能夠與每張幻燈片分別進行交互 – Hamms
當我parseHTML只是獲取第一級?因此,對於我的示例,我將不得不parseHTML將其分解爲幻燈片,然後再爲每個幻燈片分析parseHTML,以查找標題和內容。 –
根本不需要,您只需查看幻燈片[[innerHTML]](https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML)以外的內容即可無用地將你的['Elements'](https://developer.mozilla.org/en-US/docs/Web/API/Element)轉換爲字符串。例如,您可以查看['(幻燈片).children(「.cds-block-title」)](https://api.jquery.com/children/)以獲得標題'div',然後調用['.text()'](http://api.jquery.com/text/)來獲得內容 – Hamms