Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实现MutationObserver代替domsubtree_Javascript_Jquery_Dom_Mutation Observers - Fatal编程技术网

Javascript 实现MutationObserver代替domsubtree

Javascript 实现MutationObserver代替domsubtree,javascript,jquery,dom,mutation-observers,Javascript,Jquery,Dom,Mutation Observers,我有一个select[multiple],我在我的页面上给了它一个类custom multiselect,我正在为它捕获domsubtreemedited事件,如下所示: HTML: 这种方法完美无瑕。我想将domsubtreemedited函数转换为MutationObserver,因为domsubtreemedited已折旧 所以我做了这样的事情: var observer = new MutationObserver(function (mutation) { mutation.f

我有一个
select[multiple]
,我在我的页面上给了它一个类
custom multiselect
,我正在为它捕获
domsubtreemedited
事件,如下所示:

HTML:

这种方法完美无瑕。我想将
domsubtreemedited
函数转换为
MutationObserver
,因为
domsubtreemedited
已折旧

所以我做了这样的事情:

var observer = new MutationObserver(function (mutation) {
    mutation.forEach(function (m) {
        if (m.type == 'subtree') {
            adjustHeight(this);//Can I use m.target here?
        }
    });
});
observer.observe(document.querySelector('select.custom-multiselect'), {
    subtree: true
});
但我最终还是出错了

TypeError:无法将表达式转换为返回指定的类型

如何将我的
domsubtreemedited
事件转换为
MutationObserver

  • 将代码放在旧DOM事件的位置,并使用
    sel
    变量作为观察目标
  • 在MutationObserver中使用
    childList
    选项,因为
    subtree
    没有指定要查找的内容
  • 没有必要检查突变,因为您只订阅一种类型

或者,如果出于某种原因喜欢
.bind

new MutationObserver(adjustHeight.bind(null, sel))
    .observe(sel, {childList: true, subtree: true});

adjustHeight
中,此
肯定不是您想要的-您是否尝试了m.target?我尝试了,但我收到了上述错误。它不让我知道m.target是否有效:-SOK,read-至少,childList,attributes或characterData必须设置为true。否则,“指定了无效或非法的字符串”错误将被抛出-并且没有变异
。type==“subtree”
-我很惊讶您的代码竟然达到您声称的程度-哦,我明白了,该错误是因为您没有将
childList
属性
characterData
中的至少一个设置为true…谢谢,我发现另一个论坛的.type=='subtree'认为它有效,这就是我尝试的原因。目前,它不使用MutationObserver,而是使用DOMSubtreeModified函数。您需要
type==“childList
并将
childList:true
添加到
中。请观察
选项
var observer = new MutationObserver(function (mutation) {
    mutation.forEach(function (m) {
        if (m.type == 'subtree') {
            adjustHeight(this);//Can I use m.target here?
        }
    });
});
observer.observe(document.querySelector('select.custom-multiselect'), {
    subtree: true
});
$('.custom-multiselect').each(function() {
    var sel = this;
    adjustHeight(sel);

    new MutationObserver(function() {
        adjustHeight(sel);
    }).observe(sel, {childList: true, subtree: true});
});
new MutationObserver(adjustHeight.bind(null, sel))
    .observe(sel, {childList: true, subtree: true});