Встроенный JavaScript не будет работать, если вы не запустите на нем eval()
. Вы можете прочитать больше об этом здесь:
Решение eval()
может выглядеть примерно так, , но я бы посчитал это плохой практикой :
$.get(url, function(response) {
var newContent = $(response).find("#right"); //Find the content section of the response
var contentWrapper = $("#wrap"); //Find the content-wrapper where we are supposed to change the content.
var oldContent = contentWrapper.find("#right"); //Find the old content which we should replace.
oldContent.replaceWith(newContent);
//Find all inline script tags in the new content and loop through them
newContent.find("script").each(function() {
var scriptContent = $(this).html(); //Grab the content of this tag
eval(scriptContent); //Execute the content
});
});
Лучшее решение - установить идентификатор / имя для тега #right
и выполнить код, необходимый для этого конкретного содержимого.
Что-то вроде:
<div id="right" data-page-name="index">
<!-- Content -->
</div>
<div id="right" data-page-name="about-us">
<!-- Content -->
</div>
Простое решение, которое просто передает имя страницы функции, которая будет выполнять код в зависимости от страницы, будет выглядеть примерно так:
$.get(url, function(response) {
var newContent = $(response).find("#right"); //Find the content section of the response
var contentWrapper = $("#wrap"); //Find the content-wrapper where we are supposed to change the content.
var oldContent = contentWrapper.find("#right"); //Find the old content which we should replace.
oldContent.replaceWith(newContent);
var pageName = newContent.attr("data-page-name");
pageSpecificActions(pageName);
});
function pageSpecificActions(pageName) {
if (pageName == "index") {
//Run the code for index page
} else if (pageName == "about-us") {
//Run the code for about us page.
}
};
Это удерживает код JavaScript от встроенного и не использует eval()
. Еще лучше было бы использовать события, когда содержимое страницы меняется, но пока этого будет достаточно.