Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jquery не срабатывает find после ajax (https://javascript.ru/forum/jquery/21444-jquery-ne-srabatyvaet-find-posle-ajax.html)

versoul 09.09.2011 12:57

jquery не срабатывает find после ajax
 
Вложений: 1
Добрый день,прошу помощи тк не знаю в какую сторону копать. Вкратце я хочу получить аяксом страницу с того же домена,выбрать нужный мне блок и вставить его в блок который есть у меня на странице.
вот пример
function ajax(){
			$.ajax({ url: "http://192.168.1.35/flashtest/test_site/dinosaurs.html", success: function(data, d2, d3){
				$('#main').append($(data).find('#main'));
			}});
		}

после success в дата я имею нужный документ, но после $(data).find('#main') мне возвращается [] вроде как он такого элемента не находит. Пробовал делать через load вот так
function live(){
			console.log($('#main').load('http://192.168.1.35/flashtest/test_site/dinosaurs.html #main'));
		}

все отрабатывает правильно как я и хочу
Например на сайте http://pjax.heroku.com/ все срабатывает с find нормально, не пойму почему у меня не работает,я даже пробовал подключать их версию жкуери. Прошу помощи никак не могу понять почему это не работает хотя должно. В прикрепленном файле выложу простейший пример. Пока покопаюсь внутри жкуери посмотрю как работают эти функции

DjDiablo 09.09.2011 14:27

1) надо добавлять к main текст а не пытаться переместить dom элемент из текста в браузер.

function live(){
			console.log($('#main').load('dinosaurs.html #main'));
		}
		function ajax(){
			$.ajax({ url: "dinosaurs.html", success: function(data, d2, d3){				
				var  text=$(data).find("#main").html();
			   //$('#main').append(text);
                $('#main').html(text); // эта строка поудачнее так как заменит содержимое, а не добавит
			}});
}


2) файл dinosavr.html нужно переделать. Помести в динозвре main внутрь другого дива тогда всё будет ок. а иначе он просто не найдёт main. и Body ты кстати забыл.

<div>
<div id="main">
  

<ul>
  <li><a href="/">home</a></li>
  <li>dinosaurs</li>
  <li><a href="/aliens.html">aliens</a></li>
</ul>

<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/GcjxwXCxBBU" frameborder="0" allowfullscreen></iframe>

</div>
</div>

versoul 09.09.2011 14:38

DjDiablo
если бы я хотел добавить текст,то я использовал бы аналог innerHTML для заполнения блока, я хочу добавить именно объект дом append судя по докам http://api.jquery.com/append/ может принимать параметром его
contentDOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.

я не пытаюсь переместить дом елемент из текста как Вы написали, я же его прогоняю через $(data) значит я на выходе должен иметь dom объект вот в нем я и хочу искать и вставлять
Вы пробовали запустить код который написали он не работает аналогично тому,что дал я, срабатывает одинаково.
Что значит динозавр косячный? хтмлка не моя,я просто стащил ее с сайта который указал в примере и где именно с этой хтмлкой работало

DjDiablo 09.09.2011 14:58

у меня работает сейчас скину.

versoul 09.09.2011 15:00

повторюсь,что файл не мой, согласен,что боди отсутствует это странно. После добавления оборачивающего дива все заработало это факт, но почему find не может найти #main если тот просто внутри боди? ведь load обрабатывает все правильно? да и эта хтмлка используется на сайте который я приводил в первом посте и там find нормально разбирает содержимое без боди и оборачивающего дива

DjDiablo 09.09.2011 15:00

Да вот фиг его знает почеу в body ненаходит. Ежу ясно что должен.

на выходе ты должен получить не dom элемент а некоторое внутреннее представление о нём в jquery. Но об этом элементе, браузер в любом случае нечего незнает. Одним словом jquery судя по всему перемещает только элементы который есть в dom дереве браузера. Возможно в новых версиях Jquery, эту проблему решили. Я просто обошёл её вставляя текст а не Dom элемент.

versoul 09.09.2011 15:09

с оборачиванием блоком мне не подойдет тк мне нужно будет выбирать все содержимое боди + работать с содержимым хеда. Load не подходит тк он сразу грузит все в блок,а мне нужно в переменную которую я буду чуть изменять... Есть ли способ преобразовать полученный ответом текст в Dom ведь load это как-то делает?

versoul 09.09.2011 15:20

понял в чем там фишка,спасибо за помощь,ставлю плюс


Часовой пояс GMT +3, время: 21:33.