В моем php чате каждый раз при отправке сообщения я использую .load()
обновить содержимое div по моему запросу ajax. после вызова метода .load классы highlight.js исчезают.
Highlight.js init
$(document).ready(function() {
hljs.configure({useBR: true});
$('div.sendermsg , div.receivermsg').each(function(i, block)
{
hljs.highlightBlock(block);
});
});
Чат Div
foreach($n as $x) { if ($x['username'] == $username) {?>
<tr>
<td class="sendertd">
<div class="sendermsg"><?php echo $x['message']; ?></div>
</td>
</tr>
<?php }
else { ?>
<tr>
<td class="receivertd">
<div class="receivermsg"><?php echo $x['message']; ?></div>
</td>
</tr>
<?php }
} ?>
Ajax
$.ajax({
url : "backend/user_to_user.php",
type : "POST",
data : {'message':message,'user2':user2},
success: function(data)
{
//syntax is highlighted and works well before this line is called
$(".tbody").load(location.href + " .tbody > *");
$(".tbody").scrollTop($(".tbody")[0].scrollHeight);
}
});
перед вызовом ajax (просто пример, если опубликованное сообщение является javascript)
после вызова AJAX
Есть идеи?
РЕДАКТИРОВАТЬ
цитата из jquery.com
When calling .load() using a URL without a suffixed selector expression, the content is passed to .html() prior to scripts being removed. This executes the script blocks before they are discarded. If .load() is called with a selector expression appended to the URL, however, the scripts are stripped out prior to the DOM being updated, and thus are not executed.
так что я попробовал
$(".tbody").load(location.href+" .tbody > *",function(){
$.getScript("js/highlight.min.js");
});
до сих пор не работает
Получил работу, добавив это после .load()
$(".tbody").load(location.href+" .tbody > *");
$.getScript("http://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.11.0/highlight.min.js", function () {
$('div.sendermsg , div.receivermsg').each(function(i, block) {
hljs.highlightBlock(block);
});
});
Других решений пока нет …