将“DOM Waiter”转换为命名空间侦听器?

时间:2018-03-13 11:58:18

标签: javascript jquery events namespaces listener

所以我在SharePoint网站上安装了一个设计框架,用于动态插入文件列表,用户无需执行任何操作或单击任何按钮来加载列表。但是,结果中的日期不会被格式化。

与此同时,我在另一个检查DOM的用户的帮助下提出了以下解决方案,直到它们被加载,然后执行使用MomentJS重新格式化日期值的操作:

var timeout = null;
function waitForDom () {
  console.log("Checking DOM...");
  // check for the elements you expect to exist
  if ($(".shortpoint-listitem-subtitle").length) {
    $(".shortpoint-tab-title").click(function() {waitForDom();});
    clearTimeout(timeout);
    formatDates();
  }
  else {
    // adjust timeout time to whatever feels appropriate to you
    timeout = setTimeout(waitForDom, 500);
  }
}

waitForDom();

function formatDates() {
  $('.shortpoint-listitem-subtitle, .shortpoint-listitem-description').each(function() {
    var currentElement = $(this);
    var value=currentElement.text();
    var dateParseRegex = /\d\d\d\d[-]\d\d[-]\d\d[T]\d\d[:]\d\d:\d\d[.]\d{7}[Z]/g;
    var formattedDate = value.replace(dateParseRegex, function (match) {
      return moment(match).format("MMMM Do YYYY, h:mm:ss a");
    });
    currentElement.text(formattedDate);  
  });
}

setTimeout(function () {
  var content = '';
  $(".content").append(content);
}, 2300);

它有效,但它不是超级高效的。我联系了公司并问我如何能够更加同步,他们的建议是“听取像shortpoint-init[ShortPoint Name]这样的jQuery事件”。所以对于我的情况,事件将是shortpoint-initfiles-list

然而,在查看了jQuery事件示例之后,我不太清楚如何设置它以便jQuery“监听”这些“事件”发生在文档/页面上,以便它以一种方式运行代码这比等待DOM更流畅。大多数事件似乎都是响应式的,也就是说,它们等待用户的输入,例如点击。

我想我正在寻找namespacing events,但仍然不知道如何重新使用此代码。

我没有将此代码放在document readydocument load以及其他类似代码中的原因是数据是异步加载的,因此即使文档/正文也不存在数据/ DOM准备就绪。

这不应附加于任何类型的点击事件/操作。

1 个答案:

答案 0 :(得分:1)

您不是在寻找命名空间事件。您只想将事件挂钩到document

$(document).on("shortpoint-initfiles-list", function(e) {
    // Here, `e.target` will be the element the event was fired on
});

我假设这些事件泡沫。我试着在their knowledgebase上查看,但似乎没有像API引用那样愚蠢(或者他们很好地隐藏了它)。