Ответ 1
с помощью ajax очень просто,
Я рекомендую вам использовать HTML-тип данных для этого, поскольку у вас есть таблица в вашем контейнере,
здесь есть документация api = > http://api.jquery.com/jQuery.ajax/
здесь скрипка, которую я сделал для вас = > http://jsfiddle.net/sijav/kHtuQ/19/ или http://fiddle.jshell.net/sijav/kHtuQ/19/show/
Я поместил ajax-код в функцию с именем updateClass (url), URL-адрес которой соответствует URL-адресу, и он добавит контейнер с HTML-кодом get = >
function updateClass(url){
$.ajax({
url: url,
dataType: "HTML",
error: function(msg){
alert(msg.statusText);
return msg;
},
success: function(html){
$("#container").html(html);
}
});
}
Я добавил refreshClass, который обновляет весь класс контейнера, = >
function refreshClass(){
updateClass("http://fiddle.jshell.net/sijav/mQB5E/5/show/"); //update the class
}
и изменен на селектор изменений ниже кода = >
var classUpdateI; //stands for our interval updating class
$(".class-selector").on("change",function(){
if (classUpdateI!=null)clearInterval(classUpdateI); //If the selector changed clear the interval so the container won't be update on it own
if(this.value == "")
return; // if the value is null don't do anything
else if(this.value == "allclassnup"){
refreshClass(); //if the value is allclassnup which is stands for All Non-Updating just refresh the whole class
}
else if(this.value == "allclassup"){
refreshClass(); //if the value is allclassup which is stands for All Updating refresh the whole class and set an interval for thirty second (look for 30*1000)
classUpdateI = setInterval(refreshClass,30*1000);
}
else //else then it a simple class value, just simply update the current class
updateClass(this.value);
})
Надеюсь, что это поможет;)
EDIT. Отредактировано так, что он может получить большую таблицу (не генерировать ее!), и все обновления будут обновляться с интервалом в 30 секунд
AnotherEDIT: Верьте или нет, я сделал весь ваш вопрос!
РАБОЧИЙ ФИДДЛ: http://jsfiddle.net/sijav/kHtuQ/39/ или http://fiddle.jshell.net/sijav/kHtuQ/39/show/
1, потому что это было сделано только для последнего html, для нового мы должны сделать это снова! поэтому поместите всю функцию $('tr').click()
в другую функцию и вызовите ее, когда это необходимо.
- Вы хотите, чтобы это полностью работало? он немного сложный, но он может работать с небольшим изменением кодов! что я собираюсь показать вам: "Хорошо, здесь algurithm мы должны поместить текущий класс в селектор класса в файл cookie, а затем мы можем его прочитать всякий раз, когда мы обновляем или перезагружаем страницу и помещаем необходимый выбранный класс и так далее... < ш > но в разработке кода здесь я сделал, чтобы он работал,
сначала я сделал глобальную переменную под названием FirstTimeInit = true;
, чтобы быть уверенным, что мы в первый раз загружаем страницу или нет, во-вторых, я поставил цикл for, который делает вещи, выделяющие загрузку страницы функцией selectSelectedClass
, почему? потому что нам нужно называть это много раз. В-третьих, я добавил некоторый оператор if, чтобы убедиться, что если мы сможем читать куки, тогда изменим выделенные вещи и текущий класс, вот код:
if(readCookie("CurrentClass")) //if we can read coockie
$(".class-selector").val(readCookie("CurrentClass")).change(); //change it value to current cookie and trigger the change function
else{ // else
selectSelectedClass(); //select those which was highlighted before
trClick(); //make things clickable
FirstTimeInit = false; //and turn of the first time init
}
Четвертое добавление файла cookie создания при изменении значения селектора = > createCookie("CurrentClass",$(".class-selector").val(),1);
и, наконец, изменить успех при получении Ajax к этому
success: function(html){
$("#container").html(html + '<a id="KEY"></a>'); //the html container changer with adding extra id , I'll explain it later it for your second question
if(FirstTimeInit){ //if it is First Time then
selectSelectedClass(); //highlight which was highlighted after put the correct html
FirstTimeInit = false; // turn of the first time init
}
else //else
for (var i=0;i<($("table").children().length);i++){
if(readCookie(i))
eraseCookie(i); //erase every cookie that has been before because the table is now changed and we're going on another table so old cookie won't matter
}
trClick(); //make things selectable!
}
Также, чтобы сделать это bugfree, я изменил refreshClass, чтобы включить firstinit, когда выбранный класс является полностью или он равен нулю, потому что тогда у нас есть все классы и нужны эти куки! поэтому здесь код:
function refreshClass(){
if(readCookie("CurrentClass")=="allclassnup"||readCookie("CurrentClass")=="allclassup"||readCookie("CurrentClass")==null)
FirstTimeInit = true;
updateClass("http://fiddle.jshell.net/sijav/mQB5E/5/show/");
}
2 <a id="TOP"></a>
должен быть до контейнера, <a id="KEY"></a>
должен быть сгенерирован в конце контейнера после помещения html в контейнер. поэтому $("#container").html(html + '<a id="KEY"></a>');
3 Кнопка "Следующая" и "Предыдущая" была разработана для предыдущего дизайна без аякса. Теперь ему нужно другое решение! см. эти простые коды, например
$("#PreviousClass").click(function(){//on prev click
$(".class-selector").val($(".class-selector option:selected").prev().val()).change() //change the value to the prev on and trigger the change
});
$("#NextClass").click(function () {//on next click
$(".class-selector").val($(".class-selector option:selected").next().val()).change() //change the value to the prev on and trigger the change
});
4 Да Возможно, вы должны изменить свой ключ и вниз на эти коды, и вам хорошо идти = >
currentClass=0;
$("a.TOPJS").click(function () {
if(currentClass>0){
currentClass--
scrollToAnchor('CLASS'+currentClass);
}
});
$("a.KEYJS").click(function () {
if($("a[id='CLASS" + currentClass + "']")[0]!=undefined){
currentClass++
scrollToAnchor('CLASS'+currentClass);
}
else
scrollToAnchor('CLASSMAX');
});
Godd Luck
Другой запрос EDIT: (надеюсь, что это будет последний!)
Рабочий скрипт: http://jsfiddle.net/sijav/kHtuQ/42/ или http://fiddle.jshell.net/sijav/kHtuQ/42/show/
хорошо, как вам не понравился класс изменений при обновлении до того, который был в нем, я удалил это, и, лучше, я добавил некоторые коды, чтобы иметь классы в куки, поскольку файлы cookie не являются деревом, есть какие-то условия, класс читается из последнего символа селектора классов, поэтому обязательно должен иметь номер класса у последнего символа, например → Class number ***5***
, номер 5 будет прочитан для селектора классов!
EDIT: оптимизировать класс next и prev см. http://jsfiddle.net/sijav/kHtuQ/46/
EDIT: в соответствии с запрошенным комментарием. Это то, что я пытаюсь вам сказать, иногда демонстрационное шоу на jsfiddle.net, иногда оно отображается на fiddle.jshell.net, это разные доменов, и вы не можете получить html из разных доменов.
1) Вы можете поместить функцию только в Interval или просто создать другую функцию и называть ее правильным способом: →
classUpdateI = setInterval(function(){updateClass(this.value,parseInt(a.charAt(a.length-1),10));},30*1000);
2) Пропуски?! Я не могу найти ваш второй вопрос! 3) Ну,... trclick нужно изменить... to = >
function trClick(tIndex){ //tIndex would be classnumber from now on
if (tIndex == -1){ //if it is all updating or all non updating
$("tr").click(function(){ //do the previous do
$(this).toggleClass('selected').siblings().removeClass('selected');
if(readCookie($(this).parent().index("tbody"))){
if(readCookie($(this).parent().index("tbody"))==$(this).index())
eraseCookie($(this).parent().index("tbody"));
else{
eraseCookie($(this).parent().index("tbody"));
createCookie($(this).parent().index("tbody"),$(this).index(),1);
}
}
else
createCookie($(this).parent().index("tbody"),$(this).index(),1);
});
}
else{ //else
$("tr").click(function(){ //on click
$(this).toggleClass('selected').siblings().removeClass('selected');//do the toggle like before
if(readCookie(tIndex)){ //if you can read the CLASS cookie, not the current index of table because our table has only one row
if(readCookie(tIndex)==$(this).index()) //as before if we selecting it again
eraseCookie(tIndex); //just erase the cookie
else{ //else
eraseCookie(tIndex); //select the new one
createCookie(tIndex,$(this).index(),1);
}
}
else
createCookie(tIndex,$(this).index(),1); //else if we can't read it, just make it!
});
}
}
и когда мы назовем его на успех Ajax, мы должны называть его классомNumber = > trClick(classNumber);
Последняя рабочая скрипка: http://jsfiddle.net/sijav/kHtuQ/53/ или http://fiddle.jshell.net/sijav/kHtuQ/53/show/
Удача