Javascript 无法访问附加数据的属性

Javascript 无法访问附加数据的属性,javascript,jquery,json,append,Javascript,Jquery,Json,Append,我有个问题。这段代码在html是静态的并且没有附加的情况下工作,但是当附加数据时它不会 我添加了JSON文档中的数据,如下所示: $('#articles').append('<article><time pubdate="pubdate">' + pubDate + '</time><h2><a href="#">' + headline + '</a></h2><p>' + bodyText +

我有个问题。这段代码在html是静态的并且没有附加的情况下工作,但是当附加数据时它不会

我添加了JSON文档中的数据,如下所示:

$('#articles').append('<article><time pubdate="pubdate">' + pubDate + '</time><h2><a href="#">' + headline + '</a></h2><p>' + bodyText + '</p></article>'); 
然后我想访问currentElement.position():

但它回来时还没有定义。。。它能处理未处理的数据吗?我做错了什么

谢谢你的帮助

编辑:以下是完整的代码:

$(document).ready(onDocumentReady);     

    function onDocumentReady()
    {
        console.log('Document ready'); 

        $.ajax({
            type:'GET',
            url:'data.json',
            dataType:'json',
            success: jsonParser
        });

        function jsonParser(json)
        {
            $.getJSON('data.json',runData)


            function runData(data)
            {   
                $.each(data.article, writeData)

                function writeData(keys,values)
                {


                    var pubDate = values.pubDate;
                    var headline = values.headline;
                    var bodyText = values.bodyText;

                    $('#articles').append('<article><time pubdate="pubdate">' + pubDate + '</time><h2><a href="#">' + headline + '</a></h2><p>' + bodyText + '</p></article>');
                }
            }

        }



        var currentElement = $("article:first");

        console.log(currentElement.position());
我得到:

[prevObject:x.fn.x.init[1],上下文:文档,选择器:“文章:第一”,jquery:“1.10.2”,构造函数:函数…] 上下文:文档 长度:0 prevObject:x.fn.x.init[1] 选择器:“第一条” 原型:对象[0]

我真的不懂那些东西,但我觉得这可能会有帮助

更新: 如果我这样设置超时,我就能够访问元素:

setTimeout(function()
        {
        var currentElement = $("article:first");
        console.log(currentElement);
        console.log(currentElement.position().left);
        }, 1000);
它应该是
$(“文章:第一个孩子”)

编辑
无所谓
:首先
在jQuery中工作。

请确保您的ajax正在返回数据,并且正在创建文章元素。如果没有创建元素,那么它将返回未定义。

在成功函数之前,尝试在ajax调用中添加:
async:false

$.ajax({
            type:'GET',
            url:'data.json',            
            dataType:'json',
            async:false,
            success: runData(data)
        });
        function runData(data){   
            $.each(data.article, writeData)
            function writeData(keys,values){
                var pubDate = values.pubDate;
                var headline = values.headline;
                var bodyText = values.bodyText;
                $('#articles').append('<article><time pubdate="pubdate">' + pubDate + '</time><h2><a href="#">' + headline + '</a></h2><p>' + bodyText + '</p></article>');
            }
        }
$.ajax({
类型:'GET',
url:'data.json',
数据类型:'json',
async:false,
成功:runData(数据)
});
函数runData(data){
$.each(data.article,writeData)
函数writeData(键、值){
var pubDate=values.pubDate;
var headline=values.headline;
var bodyText=values.bodyText;
$(“#articles”)。追加(“”+bodyText+”

”); } }
$(“#文章:第一”)。。你错过了“#”@Sarath no OP没有错过任何”#你发布的代码应该可以工作,你在其他地方犯了错误。提供您在何处/如何使用此代码的上下文很好!!现在所有的东西都贴出来了。谢谢为什么会这样?元素正在被创建。我只是无法访问它们的positionsHanks,但没有什么区别:(好吧,看起来$.getJSON()总是进行异步调用来获取数据,但由于您使用的是$ajax,我认为您可以将“数据”传递给您的函数,而不必使用$.getJSON
console.log(currentElement); 
setTimeout(function()
        {
        var currentElement = $("article:first");
        console.log(currentElement);
        console.log(currentElement.position().left);
        }, 1000);
$.ajax({
            type:'GET',
            url:'data.json',            
            dataType:'json',
            async:false,
            success: runData(data)
        });
        function runData(data){   
            $.each(data.article, writeData)
            function writeData(keys,values){
                var pubDate = values.pubDate;
                var headline = values.headline;
                var bodyText = values.bodyText;
                $('#articles').append('<article><time pubdate="pubdate">' + pubDate + '</time><h2><a href="#">' + headline + '</a></h2><p>' + bodyText + '</p></article>');
            }
        }