Javascript来分析div?
所以我想我应该做一点Javascript练习,然后开始我的第一个Google Chrome扩展。我做了一个扩展,当用户点击Facebook上的“喜欢”按钮时,如果他们点击的帖子超过某个阈值,那么它会提示他们确保他们确实想点击帖子上的“喜欢”(以防止跟踪时意外喜欢) 我有一些基本的功能,如果用户点击like,它会提示他们确定他们想点击like,如果他们不想点击like,他们可以在那一点上取消like。然而,现在我试图添加一个帖子是否属于某个年龄段的检测,以便只在帖子过时时进行提示 我现在拥有的信息来源如下: 本质上,Facebook将这些数据存储在时间戳中,我想知道如何仅从用户当前“喜欢”的帖子中访问时间戳,而不是页面上的任何其他时间戳 以下是加载文档时运行的代码:Javascript来分析div?,javascript,jquery,html,facebook,google-chrome-extension,Javascript,Jquery,Html,Facebook,Google Chrome Extension,所以我想我应该做一点Javascript练习,然后开始我的第一个Google Chrome扩展。我做了一个扩展,当用户点击Facebook上的“喜欢”按钮时,如果他们点击的帖子超过某个阈值,那么它会提示他们确保他们确实想点击帖子上的“喜欢”(以防止跟踪时意外喜欢) 我有一些基本的功能,如果用户点击like,它会提示他们确定他们想点击like,如果他们不想点击like,他们可以在那一点上取消like。然而,现在我试图添加一个帖子是否属于某个年龄段的检测,以便只在帖子过时时进行提示 我现在拥有的信息
$(document).ready(function(){
$( ".UFILikeLink" ).click(function(e) {
if (confirm("Are you sure you want to like this?")) {
// like was intended, continue with usual behavior
}
else {
// like was not intended, lets stop that like!
e.stopPropagation();
e.preventDefault();
}
});
});
时间戳存储在abbr标记之间,如下所示:
<abbr data-utime="1421210082" data-shorten="1" class="_5ptz timestamp livetimestamp">10 mins</abbr>`
10分钟`
每个帖子都有自己的div,具有特定的唯一ID
基本上,我需要将整个UFILikeLink click函数包装在if语句中,如果日期早于某个日期,则执行click函数,对吗?如何使Javascript只在一个唯一的div中找到时间戳
有人愿意给我指出正确的方向吗?这是否可行?非常感谢您抽出时间 根据需要获取对父div的引用。如果您知道div的Id,那么这是一个选项。如果它们都在一个容器中,也许您可以通过ID获取它并迭代它的子对象。您必须提供标记才能获得关于该部分的更具体的答案。一旦有了对div的引用,就可以通过标记名获得子元素(假设里面只有一个abbr标记,或者至少有一个可识别的模式)。下面是一个你可以打电话去做的例子
document.getElementById('parentDivId').getElementsByTagName('abbr')[0].getAttribute('data-utime');
把它分成几个部分
- getElementById('parentDivId')获取对具有指定ID的元素的引用,在本例中为
- .getElementsByTagName('abbr')[0]查找div中所有不可用的子元素。如果您使用jquery(看起来这个问题就是这样标记的),它有自己的选择器集,具有额外的灵活性。首先:Facebook的时间线在您每次到达底部时都会通过AJAX请求进行更新,因此在
中添加一个侦听器只会在前几个链接上起作用(在开头加载)。如果希望它对所有链接都有效,则必须向$(“.UFILikeLink”)
元素添加侦听器 因此,您将使用
为click事件添加侦听器,并设置addEventListener('click',func(){…},true)
(最后一个参数)。使用useCapture=true
设置为useCapture
可以在事件到达目标元素之前阻止事件,并在必要时停止事件。然后,在事件侦听器中,您将检查单击的元素是否具有classtrue
,如果是,则继续 现在,在写下任何东西之前,您需要考虑以下事实进行一些更正:UFILikeButton
- 用户单击的“Like”文本实际上是一个
,并且没有类“UFILikeLink”,但是它的父类有。以下是Like链接的结构:
*+(加号)将字符串转换为数字<a class="UFILikeLink" href="#" role="button" aria-live="polite" title="Like this" ...> <span data-reactid=".27.1">Like</span> </a>
- 如果用户单击“不像”而不是“像”,则不应显示提示,因此检查所单击元素中包含的文本非常有用,如下所示:
$(e.target).text() == 'Unlike';
- Facebook时间戳以秒为单位,而JavaScript时间戳以毫秒为单位。要进行比较,必须将第一个时间戳乘以1000或将第二个时间戳除以1000
这是最后一段代码,为了让事情变得更简单,我创建了
,它是带有类“UFILikeLink”的链接,likeLink
,它表示链接中包含的文本(用户真正单击的文本)likeSpan
document.body.addEventListener('click',函数(e){ var likeLink=$(e.target.parentElement), likeSpan=$(e.target), 时间戳,oldTimestamp; //如果单击的元素不是Like按钮,只需停止该函数 如果(!likeLink.hasClass(“UFILikeLink”))返回; //如果用户单击“不同”,则无需进行检查 if(likeSpan.text()=='inference')返回; timestamp=+likeLink.parents(“.userContentWrapper”).find(“abbr”).attr(“数据utime”); //设置一个月前的限制(2592000秒=30天) oldTimestamp=+新日期()/1000-2592000; //如果帖子超过一个月。。。 if(timestamp
上面的代码将提示“确定吗?”用于超过一个月的帖子的消息。您可以编辑check变量,将其设置为较旧或较新的帖子。如果您对某个特定问题有特定问题,请在此处发布代码,而不是在网站外链接。此外,我们不需要知道您的全部背景。听起来您想从时间戳中提取时间。是这样吗?是这样吗it’你的废话太多了。如果这就是你所需要的,那么询问一下,展示一下你正在谈论的数据和你迄今为止所做的尝试。我试图澄清一下-这有帮助吗?谢谢你提供反馈!我不确定你的JavaScript和页面之间的关系。但是你哪里有问题?你无法选择吗
元素?还是无法获取valabbr
$(e.target).text() == 'Unlike';
document.body.addEventListener('click', function(e) { var likeLink = $(e.target.parentElement), likeSpan = $(e.target), timestamp, oldTimestamp; // If the clicked element is not the Like button, just stop the function if (!likeLink.hasClass("UFILikeLink")) return; // If the users clicks to UNLIKE, you don't need to check if (likeSpan.text() == 'Unlike') return; timestamp = +likeLink.parents(".userContentWrapper").find("abbr").attr("data-utime"); // Set a limit of one month ago (2592000 seconds = 30 days) oldTimestamp = +new Date()/1000 - 2592000; // If the post is older than one month... if (timestamp < oldTimestamp && !confirm("Are you sure you want to like this?")) { // like was not intended, lets stop that like! e.stopPropagation(); e.preventDefault(); } }, true);
- 用户单击的“Like”文本实际上是一个