将“DOM Waiter”转换为命名空间监听器?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将“DOM Waiter”转换为命名空间监听器?相关的知识,希望对你有一定的参考价值。
所以我在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 = /dddd[-]dd[-]dd[T]dd[:]dd:dd[.]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“监听”这些“事件”发生在文档/页面上,以便它以更流畅的方式运行代码而不是等待DOMs。大多数事件似乎都是响应式的,也就是说,它们等待用户的输入,例如点击。
我想我正在寻找namespacing events
,但仍然没有如何重新使用这个代码。
我不将此代码放在document ready
或document load
和其他类似代码中的原因是数据是异步加载的,因此即使文档/正文已准备好,数据/ DOM也不存在。
这不应该附加到任何类型的点击事件/动作。
您不是在寻找命名空间事件。你只想把事件挂钩到document
:
$(document).on("shortpoint-initfiles-list", function(e) {
// Here, `e.target` will be the element the event was fired on
});
我假设这些事件泡沫。我试着在their knowledgebase上查看,但似乎没有像API参考那样愚蠢(或者他们做得很好隐藏它)。
以上是关于将“DOM Waiter”转换为命名空间监听器?的主要内容,如果未能解决你的问题,请参考以下文章