FAQ |
Kalender |
|
![]() |
#1 | ||
|
|||
Medlem
|
Tack så mycket dAEK, din kod fungerar bra och det var väldigt bra förklarat!
Jag har dock ett par små frågor, säg att min .comment skulle ha legat i en div som heter .side_wrapper_comment. Skulle jag då ha skrivit .side_wrapper_comment istället för body eftersom att den då skulle ha varit den närmsta föräldern? Det var åtminstone så som jag förstod din förklaring eller ska den alltid ligga i body? Anledningen till att jag skickar in en sträng i .insert är att jag vill att koden ska fungera även om den första kommentaren inte existerar. Vilket för mig till min nästa fråga som lyder om det finns något bättre sätt att skapa denna nya div eftersom mitt sätt tydligen inte var att rekommendera? |
||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Mycket flitig postare
|
Aha, ser nu att jag var lite otydlig i det där med föräldernoden. När man använder delegates vill man sätta lyssnaren på ett element som alltid finns där. Den första noden som inte tas bort med javascript kan vara ett bra resonemang.
I ditt första exempel ser strukturen ut såhär: Kod:
-html |--body |----.comment_wrapper |-------.comment Kod:
-html |--body |----.comment_wrapper |-------.comment |----.comment_wrapper |-------.comment Kod:
-html |--body |----.side_wrapper_comment |-------.comment_wrapper |----------.comment |-------.comment_wrapper |----------.comment Kod:
-html |--body |----#comments |-------.comment_wrapper |----------.comment |-------.comment_wrapper |----------.comment ![]() Ang. den andra frågan: jo, det finns bättre sätt. Det finns olika templatebibliotek som gör livet enklare men jag brukar trots det föredra att göra det för hand. När man gör jobbet själv innebär det i kort att man ser till att det alltid finns en mall/template i Html-koden. När man sedan behöver infoga nya poster med Javascript tar man en kopia på mallen, klonar den, lägger in nytt innehåll och infogar den. I ditt fall skulle $(".insert")-klickfunktionen skrivas om till följande: Kod:
$('.insert').on('click', function(e) { e.preventDefault(); console.log('insert'); var template = $(".side_wrapper_comment").find(".template").first(); var clone = template.clone(); $(this).before(clone); }); Kod:
<html> [...] <body> <div class="side_wrapper_comment"> <div class="comment_wrapper"> <a href="#" class="comment">Write your comment</a> </div> <p> <a href="#" class="insert">Insert New Object</a> </p> </div> </body> </html> Om vi tänker oss att vi vill hämta nya kommentarer från servern eller liknande skulle vi kunna infoga dessa på detta ganska fiffiga sätt: Kod:
$(".reload").on("click", function(e) { e.preventDefault(); console.log("hämtar kommentarer..."); reloadComments(); }); function reloadComments() { var comments = getCommentsFromServerOrWhatever(); //returnerar en array av kommentarer var template = $("#comments").find(".template").clone(); $.each(comments, function(i, comment) { var newComment = template.clone(); newComment.find(".text").html(comment.Text); newComment.find(".author").html(comment.Author); newComment.find(".time").html(comment.PostedAt); newComment.removeClass("template"); $("#comments").append(newComment); newComment.show(); }); } Kod:
<body> <div class="side_wrapper_comment"> <div id="comments"> <div class="comment_wrapper template"> <div class="text"></div> <span class="author"></span> <span class="time"></span> </div> </div> <p> <a href="#" class="reload">Ladda om kommentarerna</a> </p> </div> </body> |
|||
![]() |
![]() |
Svara |
|
|