私はいくつかの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...."
}
]
私はいくつかの異なるアプローチを試してみました。 Regexの使用(私のテストでは動作しましたが、プロダクションに入れなかった場合、期待通りに動作しなくなりました。また、正規表現を使って正規表現を解析するのが最善の方法ではないことを示す記事もあります):
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);
まず、[regex](http://stackoverflow.com/a/1732454/1810460)を使用しないでください。次に、あなたのHTMLがなんらかの理由で文字列内でDOM内にない場合にのみ 'parseHTML'を使いたいとします。その場合、 'slides.children( 'slide')のようなことができるはずです。each(function(slide){})'は各スライドと個別にやりとりすることができます – Hamms
私は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)を文字列に変換するのは間違いです。例えば、 '' $(slide).children( ".cds-block-title") '](https://api.jquery.com/children/)を見れば、' div'というタイトルを得ることができます。コンテンツを取得するには['.text()'](http://api.jquery.com/text/)を呼び出してください。 – Hamms