Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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 .find()不';无法在域节点插入上按预期工作_Javascript_Jquery_Jquery Ui_Dom_Datepicker - Fatal编程技术网

Javascript .find()不';无法在域节点插入上按预期工作

Javascript .find()不';无法在域节点插入上按预期工作,javascript,jquery,jquery-ui,dom,datepicker,Javascript,Jquery,Jquery Ui,Dom,Datepicker,我有一个使用jquery ui日期选择器的项目。这个日期选择器使用了我想要更改的旧图标,在将来更新时不需要修改jqueryui-{version}.js的代码。 另外,我不能使用另一个日期选择器,因为已经有很多与此日期选择器相关的工作,更改所有这些都将完全浪费时间,并且可能会破坏当前的应用程序 因为datepicker是一个通过javascript创建的元素,所以我认为可以使用eventdomandeinserted来修改所需元素的类 我的日期选择器的体系结构如下所示: 这是我写的代码: $(

我有一个使用jquery ui日期选择器的项目。这个日期选择器使用了我想要更改的旧图标,在将来更新时不需要修改
jqueryui-{version}.js
的代码。 另外,我不能使用另一个日期选择器,因为已经有很多与此日期选择器相关的工作,更改所有这些都将完全浪费时间,并且可能会破坏当前的应用程序

因为datepicker是一个通过javascript创建的元素,所以我认为可以使用event
domandeinserted
来修改所需元素的类

我的日期选择器的体系结构如下所示:

这是我写的代码:

$(document).on('DOMNodeInserted','div.ui-datepicker',function(e){

    var element = e.target;

    var prev = $(element).find('div.ui-datepicker-header').find('a.ui-datepicker-prev').find('span.ui-icon');
    var next = $(element).find('div.ui-datepicker-header').find('a.ui-datepicker-next').find('span.ui-icon');
    //The prev and next elements are not the ones i am looking for

    $(prev).removeClass();
    $(next).removeClass();

    $(prev).empty();
    $(prev).addClass('fas');
    $(prev).addClass('fa-chevron-left');

    $(next).empty();
    $(next).addClass('fas');
    $(next).addClass('fa-chevron-right');

});
正如我在代码中作为注释所写的那样,prev和next对象是不正确的。 只有第一个
.find()
起作用。当我在控制台上打印元素时,它将元素
div.ui-datepicker-header
打印为
prev
next
的元素。我尝试分离检索以找到问题所在,但即使是
.find('a.ui-datepicker-prev')
也不起作用。没有错误,但它仍然检索父级,即使我使用它查找其子级。我尝试使用
.children('a.ui-datepicker-prev')
,但没有任何改变

触发我的是,如果我将完全相同的代码放在
.on('DOMNodeInserted')
事件之外的任何地方,它就会工作。我有点困在这里,我找不到有同样问题的人,如果你有,请分享

欢迎提出任何意见

var prev = $(element).find('div.ui-datepicker-header').find('a.ui-datepicker-prev').find('span.ui-icon');
var next = $(element).find('div.ui-datepicker-header').find('a.ui-datepicker-next').find('span.ui-icon')
应该是

var prev = $(element).find('div.ui-datepicker-header a.ui-datepicker-prev span.ui-icon');
var next = $(element).find('div.ui-datepicker-header a.ui-datepicker-next span.ui-icon');

.find('div.ui-datepicker-header')
是unneeded@evolutionxbox我试过你说的,你是对的,但我不明白为什么?关于元素的体系结构,这是有意义的,因为
find
“获取当前匹配元素集中每个元素的后代,通过选择器、jQuery对象或元素“@evolutionxbox”进行过滤,因此它在.on('DOMNodeInserted')之外工作这仅仅是一个bug吗?这取决于JS的调用顺序。我不熟悉
DOMNodeInserted
,所以我不知道这是否是一个运行代码的好事件。谁知道此时是否存在
.ui-datepicker-header
呢?同样的问题:/您不能在没有find()var prev=$(ui-datepicker-div div.ui-datepicker-header a.ui-datepicker-prev span.ui图标)的情况下以元素为目标吗;这主意不错,但实际上我从前面的一条评论中得到了解决方案,不需要'div.ui-datepicker-header',它在那之后就可以工作了