【问题标题】:Uncaught TypeError: Object #<HTMLDivElement> has no method 'offset'未捕获的类型错误:对象 #<HTMLDivElement> 没有方法“偏移”
【发布时间】:2013-12-21 21:27:37
【问题描述】:

我正在尝试动态创建一个元素,然后获取所述元素的中心。这是我所拥有的:

function drawnode(entity, x, y) {

    var ele = ""
    ele += "<div class='relNode'>";
    ele += "<span>" + entity.name() + "</span>"
    ele += "<div>"

    var node = $(ele).appendTo('#rPaper').get(0);
    var offset = node.offset();
    var width = node.width();
    var height = node.height();

    var centerX = offset.left + width / 2;
    var centerY = offset.top + height / 2;

    node.css("top", centerY + y).css("left", centerX + x);

}

这给出了错误

Object #&lt;HTMLDivElement&gt; has no method 'offset'

我最初在没有.get(0) 的情况下尝试过,它没有给出任何错误,但高度和宽度都是 0。

我做错了什么?

【问题讨论】:

    标签: javascript jquery dom


    【解决方案1】:

    您正在尝试在DOM 对象上调用jQuery 函数,因为get 给您DOM 对象而不是jQuery 对象使用eq() 而不是get() 来获取jQuery 对象

     var node = $(ele).appendTo('#rPaper').eq(0);
    

    【讨论】:

    • 我不认为这是必需的,因为ele 只有一个根元素
    • @ScottBeeson:它对我有用:jsfiddle.net/FZNam。难道#rPapernode 的任何其他后代不可见?你用的是哪个浏览器?
    • 嗯,这可能是问题所在。它在一个选项卡中,但在选择该选项卡之前调用该函数。
    • @Scott:那是你的问题。
    • 嗯,有没有简单的解决方法或者我必须等到选项卡可见才能绘制节点?
    【解决方案2】:

    .get(index) 返回一个 dom 元素引用,它没有像 jQuery 提供的 offset() 这样的方法。所以你需要为元素使用一个jQuery包装器来使用像.offset()/.width()这样的方法

    var node = $(ele).appendTo('#rPaper');
    

    【讨论】:

    • 原来是这样的,后来高宽都是0。
    • @ScottBeeson 你确定元素#rPaper 存在于dom中
    • 是的。创建时我可以在页面上看到新元素。
    • @ScottBeeson 你能帮忙重现这个问题吗.. 在这个fiddle 它似乎工作正常
    • 是的,@Felix King 刚刚指出问题可能是由于 #rPaper 位于最初不可见的选项卡上。
    【解决方案3】:
     var node = $(ele).appendTo('#rPaper');
     var offset = node.offset();
    

    【讨论】:

    • 原来是这样,后来高宽都是0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多