Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript来分析div?_Javascript_Jquery_Html_Facebook_Google Chrome Extension - Fatal编程技术网

Javascript来分析div?

Javascript来分析div?,javascript,jquery,html,facebook,google-chrome-extension,Javascript,Jquery,Html,Facebook,Google Chrome Extension,所以我想我应该做一点Javascript练习,然后开始我的第一个Google Chrome扩展。我做了一个扩展,当用户点击Facebook上的“喜欢”按钮时,如果他们点击的帖子超过某个阈值,那么它会提示他们确保他们确实想点击帖子上的“喜欢”(以防止跟踪时意外喜欢) 我有一些基本的功能,如果用户点击like,它会提示他们确定他们想点击like,如果他们不想点击like,他们可以在那一点上取消like。然而,现在我试图添加一个帖子是否属于某个年龄段的检测,以便只在帖子过时时进行提示 我现在拥有的信息

所以我想我应该做一点Javascript练习,然后开始我的第一个Google Chrome扩展。我做了一个扩展,当用户点击Facebook上的“喜欢”按钮时,如果他们点击的帖子超过某个阈值,那么它会提示他们确保他们确实想点击帖子上的“喜欢”(以防止跟踪时意外喜欢)

我有一些基本的功能,如果用户点击like,它会提示他们确定他们想点击like,如果他们不想点击like,他们可以在那一点上取消like。然而,现在我试图添加一个帖子是否属于某个年龄段的检测,以便只在帖子过时时进行提示

我现在拥有的信息来源如下:

本质上,Facebook将这些数据存储在时间戳中,我想知道如何仅从用户当前“喜欢”的帖子中访问时间戳,而不是页面上的任何其他时间戳

以下是加载文档时运行的代码:

$(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”)
    中添加一个侦听器只会在前几个链接上起作用(在开头加载)。如果希望它对所有链接都有效,则必须向
    元素添加侦听器

    因此,您将使用
    addEventListener('click',func(){…},true)
    为click事件添加侦听器,并设置
    useCapture=true
    (最后一个参数)。使用
    useCapture
    设置为
    true
    可以在事件到达目标元素之前阻止事件,并在必要时停止事件。然后,在事件侦听器中,您将检查单击的元素是否具有class
    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

  • 这是最后一段代码,为了让事情变得更简单,我创建了
    likeLink
    ,它是带有类“UFILikeLink”的链接,
    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和页面之间的关系。但是你哪里有问题?你无法选择吗
    abbr
    元素?还是无法获取val
    $(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);