2010-09-25 7 views
0

Это первая вещь, которую я пишу в JavaScript, так что я надеюсь, что его основная ошибкаЧто случилось с моим кодом

То, что я пытаюсь достичь здесь: Возьмите кучу ссылок со страницы, загружать их содержимое запроса для ссылок внутри и добавить их в список на текущей странице.

я получаю сообщение об ошибке на Append И в JQ документации они говорят, что метод может получить объект JQ

<script type="text/javascript"> 
    $(document).ready(function() { 
     var wtf = $(".download"); 
     var links = $("a", wtf) 
     links.each(function (index) { 
      var newFrame = document.createElement("div"); 
      $(newFrame).load($(this).context.href, function (response, status, xhr) { 
       if (status == "error") { 
        alert("error"); 
       } 
       $("a", response).each(function (index) { 
        $("#results").append($(this)); 
       }); 
      }); 
      // $("#results").append(newFrame); 
     }); 
    }); 
</script> 
+7

Вы должны ознакомиться с JavaScript как языком, прежде чем принимать такие библиотеки, как jQuery. Так будет легче подобрать. – BoltClock

+1

напишите пожалуйста скриншот или лучшее описание ошибки. –

+0

Для выполнения функции .load требуется, чтобы объект jQuery работал. Вы просто создали переменную newFrame с

var newFrame
, которая не является объектом jQuery. Так что .load не будет работать на этом. – Mussnoon

ответ

3

Давайте посмотрим, если мои угадывание ошибок проверки способности достаточно хороши для этого:

// No point really in using context here. 
// This would be better, or at least more readable 
var links = $(".download a"); 

// No need to add in the argument if you're not actually going to use it 
links.each(function() { 
    // Doing this will get you create the jQuery object 
    // without having to use the DOM createElement method 
    var newFrame = $('<div />'); 

    // this.href is shorter and neater 
    newFrame.load(this.href, { 
     'html': '.ajax' 
    }, function(response, status, xhr) { 
     if (status == "error") { 
      console.log(xhr); 
     } 

     // This is the odd part - response is a selector? 
     // This should loop through each anchor that are a child 
     // Of the element selected by the response receieved 
     // Using appendTo here is better than looping through 
     // each element and using .append() there 
     $(response).find("a").appendTo("#results"); 

     // And finally of course because this is .load() 
     // Remember that the actual response is also 
     // appeneded to the element in question, 
     // hence the extra .ajax appearing there 
    }); 

    // This occures outside of callback, 
    // so it's actually executed *before* the code above 
    $("#results").append(newFrame); 
}); 

См jsfiddle за этот кусок кода на самом деле работает: http://jsfiddle.net/E589q/4/

+0

Есть ли глубокая находка? –

+0

В первой строке, это будет выбирать все ссылки внутри элемента, у которого есть класс загрузки? –

+1

@Chen Вы имеете в виду функцию, которая ищет элементы за пределами первого уровня потомков, например 'children()'? Вы должны использовать 'find()' then. Кроме того, как я уже отмечал, это туманные догадки того, что вы пытаетесь сделать. Если у вас есть другие вопросы, не стесняйтесь спрашивать другого. –

0

функция нагрузки не имеет возможности обработки ошибок, она предназначена только для простой функциональности Ajax.

Попробуйте

<script type="text/javascript"> 
<!-- 
$(document).ready(
function() { 

    var links = $("a.download") 
    $.each(links, 
    function() { 
     var url = $(this).attr('href'); 
     var newFrame = $("<div></div>").appendTo('body').css({position: 'absolute', top: '100px', left: '100px'}); 
      $(newFrame).load(url) 
       }) 
          }) 

//--> 
</script>