سؤال

لدي Div الذي في مستند JQuery جاهز $("#div id").append('html text') بناء الجملة - مع 10 عناصر الطفل Div.

بمجرد الانتهاء من ذلك ، أحاول التحقق من محتوى divs الطفل عبر alert($(".classname")); ويعود مع:

function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)}

كنت أتوقع أن يتنبه بمحتويات HTML من Divs الطفل وليس JavaScript؟

السيناريو الكامل:

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

        // twitter api's base url
        var url="http://search.twitter.com/search.json?callback=?&result_type=recent&q=";
        // we'll store the search term here
        var query = "blah";
        // get the json file
        $.getJSON(url+query,function(json){
            // this is where we can loop through the results in the json object
            $.each(json.results,function(i,tweet){
                // this is where we do what we want with each tweet
                $("#results").append('<div class="tweetBox"><span class="unseen">'+tweet.created_at+'</span><div class="tweetImg"><img src="'+tweet.profile_image_url+'" width="48" height="48" /><a class="overbox" href="http://twitter.com/'+tweet.from_user+'/status/'+tweet.id+'"></a></div>'+tweet.text+' ...said '+((new Date().getTime()/1000/60)-(new Date(tweet.created_at))/1000/60).toFixed(0)+' minutes ago</div>');

            });
        });

        $("#results").height(function(){return $(window).height()-204;});
        alert($(".unseen").html());     
    });
</script>

<div id="results"></div>

تحديث: بالتأكيد نوع من حالة سباق jQuery/JavaScript يحدث هنا ، إذا استبدلت التنبيه setTimeout(function(){alert($(".unseen").html());},1000); يعيد النص المتوقع. إذا قمت بتغيير المهلة الموقوفة إلى 1 مللي ثانية ، فإنها تعود null مرة اخرى.

لست متأكدا من حل "حقيقي" لهذا بخلاف الالتصاق في التأخير؟

هل كانت مفيدة؟

المحلول

مكالمات أياكس (مثل $.getJSON) يتم بشكل غير متزامن.

هذا يعني أنه عندما يتم اختيار jQuery (في أسفل البرنامج النصي) ، قد لا يتم استلام الاستجابة حتى الآن (لا يزال في الطريق).

يجب عليك نقل جميع التعليمات البرمجية التي تعتمد على العناصر التي تم إنشاؤها من الاستجابة في وظيفة رد الاتصال (مباشرة بعد $.each(...);)

السابق:

$.getJSON(url+query,function(json){
    // this is where we can loop through the results in the json object
    $.each(json.results,function(i,tweet){
        // this is where we do what we want with each tweet
        $("#results").append('<p>this element is created only when the callback is triggered</p>');
    });
    // do stuff here with all your created elements
    alert('found '+$(".unseen").length+' objects');
});

لاحظ أيضًا أن لغة البرمجة() تُرجع الدالة محتويات HTML للعنصر الأول فقط في المجموعة.

تحرير: تعمل خدعة المهلة الخاصة بك لأنها تمنح Ajax استدعاء الوقت الذي يحتاجه إلى إكمال وتشغيل وظيفة رد الاتصال التي تعلن الكائنات إلى DOM.

انظر مثال العمل هنا.

نصائح أخرى

محاولة

alert($('.classname').html());

لا أفهم لماذا تم إرجاع نص الوظيفة ؛ هل أنت متأكد من أنك حصلت للتو $('.classname') في الخاص بك alert() مكالمة؟ ربما كان لديك $('.classname').html بدون النهائي ()?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top