.find()无法在DOMNodeInserted上正常工作

时间:2018-08-08 08:56:11

标签: javascript jquery jquery-ui dom datepicker

我有一个使用jquery-ui datepicker的项目。这个日期选择器使用的是我想更改的较旧图标,以防将来更新时修改jquery-ui-{version}.js的代码。 另外,我不能使用其他日期选择器,因为已经有很多与此日期选择器相关的工作,并且更改所有日期选择器绝对是浪费时间,并且可能会破坏当前的应用程序。

因为日期选择器是通过javascript创建的元素,所以我认为我可以使用事件DOMNodeInserted来修改所需元素的类。

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

这是我写的代码:

$(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');

});

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

触发我的是,如果我使用完全相同的代码并将其放在.on('DOMNodeInserted')事件中之外的任何地方,那么它将起作用。我有点卡在这里,找不到一个有同样问题的人,如果有的话,请分享。

欢迎提出任何想法。

1 个答案:

答案 0 :(得分:0)

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');