Javascript DOM对象在通过jquery函数后失去引用

Javascript DOM对象在通过jquery函数后失去引用,javascript,jquery,function,dom,Javascript,Jquery,Function,Dom,我对一个对象引用发生了一些奇怪的事情 我在onclick var tdButtonDOMCopy = $('#tD'+catSeq+'Button'); 这是Jquery中创建的按钮,参考其下一个函数: tdButtonDOM.replaceWith('<button id="buttonChange" onclick="approveFormEdit(\''+tdButtonDOMCopy+'\')"\n\ class="btn

我对一个对象引用发生了一些奇怪的事情

我在
onclick

 var tdButtonDOMCopy = $('#tD'+catSeq+'Button');
这是Jquery中创建的按钮,参考其下一个函数:

 tdButtonDOM.replaceWith('<button id="buttonChange" onclick="approveFormEdit(\''+tdButtonDOMCopy+'\')"\n\
                          class="btn btn-primary">Sla wijziging op</button>');
有趣的是:

onclick
部分中,对象
tdButtonDOMCopy
被视为DOM对象,我可以对其使用
.html()
方法

但是,一旦对象到达函数
approveFormEdit
时,
.html()
方法就不再工作,因为它不知何故丢失了reference DOM对象

这是怎么回事

这是对上下文的篡改


您以引号形式传递它,因此它是一个字符串文本,因此错误是预期的,因为.html()是一个jQuery方法

您需要删除传递不带引号的
tdButtonDOMCopy
,然后它将被视为变量

tdButtonDOM.replaceWith('<button id="buttonChange" onclick="approveFormEdit(tdButtonDOMCopy)" class="btn btn-primary">Sla wijziging op</button>');

您正在用引号传递它,因此它是一个字符串文本,因此错误是预期的,因为.html()是一个jQuery方法

您需要删除传递不带引号的
tdButtonDOMCopy
,然后它将被视为变量

tdButtonDOM.replaceWith('<button id="buttonChange" onclick="approveFormEdit(tdButtonDOMCopy)" class="btn btn-primary">Sla wijziging op</button>');

请不要混合使用过时的DOM0内联事件处理程序和jQuery。您将对象与其他文本文字连接起来,从而将其放入字符串上下文中。因此它的toString方法被调用——对于没有定义自己的对象,会调用一个通用版本,该版本只返回文本
[object object]
。不能以这种方式传递复杂对象。听@Alnitak说的话——并使用适当的jQuery方法。如果您需要引用某个对象,请将其存储在以后需要使用f.e引用的元素上。感谢您的建议。传递的DOM对我来说是新的,就像以前一样,我在.replace()函数中重新编写了整个DOM html,因此我宁愿复制元素也不愿重写它。请不要混合使用过时的DOM0内联事件处理程序和jQuery。通过将对象与其他文本文本连接,将对象放入字符串上下文中。因此它的toString方法被调用——对于没有定义自己的对象,会调用一个通用版本,该版本只返回文本
[object object]
。不能以这种方式传递复杂对象。听@Alnitak说的话——并使用适当的jQuery方法。如果您需要引用某个对象,请将其存储在以后需要使用f.e引用的元素上。感谢您的建议。传递的DOM对我来说是新的,就像以前一样,我在.replace()函数中重新编写了整个DOM html,因此我宁愿复制元素,也不愿重写它。不幸的是,我使用edit得到的是“Uncaught SyntaxError:Unexpected identifier”,我将使用data-attribute。到目前为止,当我让对象使用.html()方法时,我仍然得到“undefined”,但我将尝试解决这个问题。jQuery中的数据属性用法对我来说是新的。这太糟糕了,但经过数百次尝试之后,不可能得到复制的DOM元素的.html()。我的上下文同时适用于onclick和数据目标。数据ID的读取方式与alert()中的相同,但仅此而已。其余的都是未定义的,所以我担心我需要保留它来重新编写DOM,而不是复制它们。值得一试though@MwBakker,你能做一把小提琴吗?我将探索并为您提供解决方案。如果可能,请分享一些细节,我可能会提供另一种解决方案。也不接受answer@MwBakker,我只保留了相关的代码,希望它能对我有所帮助,“uncaughtsyntaxerror:unexpectedidentifier”是我用editI得到的,我将使用data-attribute。到目前为止,当我让对象使用.html()方法时,我仍然得到“undefined”,但我将尝试解决这个问题。jQuery中的数据属性用法对我来说是新的。这太糟糕了,但经过数百次尝试之后,不可能得到复制的DOM元素的.html()。我的上下文同时适用于onclick和数据目标。数据ID的读取方式与alert()中的相同,但仅此而已。其余的都是未定义的,所以我担心我需要保留它来重新编写DOM,而不是复制它们。值得一试though@MwBakker,你能做一把小提琴吗?我将探索并为您提供解决方案。如果可能,请分享一些细节,我可能会提供另一种解决方案。也不接受answer@MwBakker,我只保留了相关代码,希望对您有所帮助
var tdButtonDOMCopy = '#tD' + catSeq + 'Button';
tdButtonDOM.replaceWith('<button id="buttonChange" data-target="' + tdButtonDOMCopy + '" class="btn btn-primary">Sla wijziging op</button>');

function approveFormEdit() {
    var targetSelector = $(this).data('target'); ;
    tdButtonElement = $(targetSelector);
}

$(document).on('click', '#buttonChange', approveFormEdit)