【发布时间】:2018-08-21 16:13:03
【问题描述】:
因此,我在 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 ready 或document load 和其他类似代码中的原因是数据是异步加载的,因此即使文档/正文已准备好,数据/DOM 也不存在。
这不应附加到任何类型的点击事件/动作。
【问题讨论】:
标签: javascript jquery events namespaces listener