Импортировать часть файла, используя $ .get - PullRequest
2 голосов
/ 26 января 2012

Я хочу импортировать содержимое html-файла и заполнить текстовое поле (тип ввода: "text" value = "") содержимым.

Пока у меня есть:

$("a.clickable").click(function(event){
  $.get('site.html', function(data){
    $("input#textbox").val(data);
  });
});

Это прекрасно работает, но я хочу импортировать только часть файла, указанного в div id (или class), подобно тому, что произошло бы, если бы я использовал .load, вот так:

$('#textbox').load('site.html #someid')

или (если это было возможно):

 $.load('site.html #someid', function(data){...

Я полагаю, что я не могу сохранить импортированный текст как переменную, используя .load, так что об этом не может быть и речи (верно!?!). Я думал, что, возможно, используя .find ('# someid'), я смогу получить нужную часть из html-файла. На это есть похожая тема:

JQuery .load () в переменный или скрытый элемент

... но неважно, что я не могу заставить его работать!

Ответы [ 2 ]

1 голос
/ 26 января 2012
$.get('/your_url/', function(reply_string){
  // turn reply string into a jQuery object so you can look up elements and evaluate
  var retrieved_value = $(reply_string).find('#your_element').val()
  $('#textbox').val(retrieved_value)
})

не очень элегантно, но должно работать ...

0 голосов
/ 24 сентября 2013

Я обнаружил, что попытка использовать $(layout).find("#fragment-id") в HTML, полученном с помощью $.get(), даст мне только пустой объект. Вместо этого, как @Matte прокомментировал другой ответ, я добавил необработанный HTML-код к div, который я создал с помощью jQuery. Затем я мог бы использовать find(), получить нужный фрагмент и сохранить его в переменной. Я смог добавить переменную к своей цели или использовать ее позже.

var $template;
$.get("layout.html", function( layout ) {
  $template = $("<div></div>").html( layout ).find("#fragment-id");

  $target.append( $template );
}

Приведенный выше код возвращает полный фрагмент в виде объекта jQuery, что соответствует моей цели. Если вы хотите получить только простой внутренний html из фрагмента, вам нужно использовать .find("#fragment-id").html()

...