웹 개발을 배우려고해서 아직 다양한 언어와 마크 업에 대한 경험이 많지 않습니다. Tumblr v2 API에서 JSON 데이터를 읽는 블로그가있는 웹 사이트를 만들고 있습니다. Tumblr에서 JSON 데이터를 가져온 후 각 게시물의 데이터 중 일부를 내 웹 사이트의 블로그에 추가하고 싶습니다. 여기에 제가 사용하려고했던 코드가 있습니다.
<script>
function loadBlogPosts(){
$.getJSON("http://api.tumblr.com/v2/blog/[MY_BLOG]/info?api_key=[MY_KEY]",
function(blogData){
$.each(blogData.posts, function(){
$(#main_content).append( [BUNCH OF NESTED HTML] );
});
}
);
}
</script>
이 글을 쓰기 전에 div에 각 블로그 게시물의 '레이아웃'을 만드는 것이 좋은 생각이라고 생각했습니다. 그래서 나는 이것을 생각해 냈습니다.
<div class="post">
<div class="post_header">
<div class="post_title"></div>
<div class="post_author"></div>
<div class="post_date"></div>
</div>
<div class="post_content"></div>
<div class="post_footer"></div>
</div>
그러나 그것이 내가 붙어있는 곳입니다. 내가 뭘하고 싶은지 알고 있지만 자바 스크립트 / JQuery / JSON / HTML에 대한 충분한 경험이 없어서 어떻게하는지 알 수 없습니다. JSON 블로그 데이터를 구문 분석하고 각 게시물에 대해 게시물 내용을 가져 와서 해당 div 구조에 적용하고 "main_content"div에 작성 / 추가합니다. 해당 div 그룹을 추가 기능에 복사하여 붙여 넣으려고합니다. 따옴표로 둘러싸여 있지만 따옴표와 슬래시가 정말 엉망이되었고 제대로 작동하는 것처럼 보이지 않았습니다 ..
그래서, 제가 그렇게하는 가장 좋은 방법은 무엇입니까? 내 JSON 데이터의 콘텐츠로 채우면서 중첩 된 HTML 요소의 큰 청크를 적용하는 좋은 방법이 있습니까? 그렇지 않은 경우 어떻게해야합니까? 나는 여전히 HTML, JavaScript 및 웹 코딩에 익숙하지 않기 때문에 완전히 잘못 될 수 있습니다!
고성능을 원하는 경우 :
순수한 자바 스크립트에서 가장 성능이 좋은 방법은 아마도 createDocumentFragment()
function postEl(json){ // create a function for the POST element
var post=document.createElement('div');
post.className='post';
var postHeader=document.createElement('div');
postHeader.className='post_header';
var postTitle=document.createElement('div');
postTitle.className='post_title';
postTitle.tectContent=json.title;
//more code
postHeader.appendChild(postTitle);
//more code
post.appendChild(postHeader);
return post;
}
function appendPosts(){ // append each post to a fragment. and then to the main
var frag=document.createDocumentFragment();
for(/*each post*/){
frag.appendChild(postEl(/*jsonPost*/));
}
document.getElementById('main_content').appendChild(frag);
}
구조를 미리 생성하면 성능도 향상됩니다.
cloneNode
https://developer.mozilla.org/en-US/docs/Web/API/Node.cloneNode
https://developer.mozilla.org/en-US/docs/Web/API/document.createDocumentFragment
노드를 복제하면 각 개별 노드를 다시 만들지 않고 값을 직접 설정하여 성능이 향상됩니다.
function appendPosts(js){
var node=document.createElemtnt('div'),
frag=document.createDocumentFragment();
node.innerHTML='<div class="post_header"><div class="post_title"></div><div class="post_author"></div><div class="post_date"></div></div><div class="post_content"></div><div class="post_footer"></div>';
for(var a=0,b;b=js.posts[a];++a){
var newNode=node.cloneNode(true),
childs=newNode.childNodes,
header=childs[0].childNodes;
header[0].textContent=b.title/*title from Postdata*/;
header[1].textContent=b.author/*author from Postdata*/;
header[2].textContent=b.date/*date from Postdata*/;
childs[1].textContent=b.content/*content from Postdata*/;
childs[2].textContent=b.footer/*footer from Postdata*/;
frag.appendChild(newNode);
}
document.getElementById('main_content').appendChild(frag);
}
function loadBlogPosts(){
$.getJSON("http://api.tumblr.com/v2/blog/[MY_BLOG]/info?api_key=[MY_KEY]",
appendPosts
)
이 기능은 이제 작동합니다 ..하지만 json 응답을 정확히 모르기 때문에 다양한 post 키를 변경해야 할 수도 있습니다.
참고 : 나는 그것이 어떻게 작동하는지 알 수 있도록 조각을 함수에 넣었습니다. appendPosts 함수 안에 postEl 콘텐츠를 넣어야합니다 ... (더 빠릅니다)
질문이 있으면 물어보세요.
편집하다
아니 그들은 글로벌이 아닙니다
var a,b,c,d; // not globals == var a;var b;var c;var d;
var a,b;c;d; // c d = gobal
// , comma affter a var allows you to not write 1000 times var.
EDIT2
//.......
frag.appendChild(newNode);
}
var topNode=document.createElement('div');
topNode.className='post';
topNode.appendChild(frag);
document.getElementById('main_content').appendChild(topNode);
//.....
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다