javascript - 替换 Instagram 帖子中的部分文本(主题标签)

标签 javascript

我使用 Instagram API 加载网页上的最后 20 个帖子。我检索了图像和帖子的文本,效果很好。我尝试实现的其他目标是删除/替换所有以 # 开头的单词,即所谓的“主题标签”。这是我遇到的麻烦。目前,20 条文本全部替换为文本 1,其中标签已成功替换。

我的JS(代码的相关部分位于最后,您可以在其中看到我尝试过的内容):

    var request = new XMLHttpRequest();
    request.open('GET', 'https://api.instagram.com/v1/users/self/media/recent/?access_token=737514925.b2b5dcf.40705a1de9b54c039e840c52fe08b39c&count=20', true);

    request.onload = function() {
        if (request.status >= 200 && request.status < 400) {
            // Success!
            var data = JSON.parse(request.responseText);
            for (var i=0;i < data.data.length;i++) {
                var container = document.getElementById('insta-feed');
                var imgURL = data.data[i].images.standard_resolution.url;
                var link = data.data[i].link;
                var text = data.data[i].caption.text;

                var imageDiv = document.createElement('div');
                imageDiv.setAttribute('class','insta-pic col-md-4');
                container.appendChild(imageDiv);

                var a = document.createElement('a');
                a.setAttribute('href', link);
                a.setAttribute('target', '_blank');

                var img = document.createElement('img');
                img.setAttribute('src',imgURL)
                img.setAttribute('class','img-instagram')

                var textDiv = document.createElement('div');
                textDiv.setAttribute('class','insta-text col-md-7');
                container.appendChild(textDiv);

                var p = document.createElement('p');
                p.innerHTML = text;

                imageDiv.appendChild(a);
                textDiv.appendChild(p);
                a.appendChild(img);

            }
        }


        // This is the (relevant) part that does not work
        var regexHash = /#\w+/gm;
        function replacer(){
            return '#hereWasSomeTag';
        }
        for (var i=0;i < data.data.length;i++) {
            var instaPostText = $('.insta-text p').html();
            $('.insta-text p').html(instaPostText.replace(regexHash, replacer));
        }
        // end of part that does not work

    };

    request.onerror = function() {
        // There was a connection error of some sort
    };
    request.send();

或者JSFiddle (请注意,在 JSFiddle 上,完全相同的代码会出现不同的问题,没有文本被替换,但所有原始文本都可见)。

我想这个问题很容易解决,但由于我对 JS 的理解很差,我不知道如何解决。

最佳答案

    for (var i=0;i < data.data.length;i++) {
        var instaPostText = $('.insta-text p').html();
        $('.insta-text p').html(instaPostText.replace(regexHash, replacer));
    }

$('.insta-text p') 这里始终选择相同的元素,您没有将其限制为任何特定的父元素。与 jQuery getter 方法通常的情况一样,.html() 将获取第一个匹配元素的 HTML。 setter 的行为不同,因此在下一行中,您设置替换第一个匹配段落的内容,以替换所有匹配的段落。您在循环中多次执行此操作不会改变结果。

为什么要在创建这些元素的循环之后执行此操作?直接在您创建文本节点的位置执行此操作:

        var p = document.createElement('p');
        p.innerHTML = text.replace(regexHash, replacer);

https://jsfiddle.net/vcmxpe39/2/

关于javascript - 替换 Instagram 帖子中的部分文本(主题标签),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56185320/

相关文章:

javascript - JWT Restify 排除路径和所有子路径

javascript - 使用选择下拉菜单而不是输入标签字段的日期选择器

javascript - 如何在本地加载 wasm 模块?

javascript - 如何在 Firebase 中生成 "storageBucket"?

javascript - 为什么我的 this.props.navigation.setParams 不起作用?

javascript - 像Windows 8 Metro IE一样创建键盘 "Extension"

javascript - Facebook - 共享链接无法正常工作 - javascript/jquery

javascript - 有没有像 JavaScript 编译器这样的东西?

javascript - IE8 : document. 写入打开的窗口给我 "Access is denied"

javascript - 如何在每个浏览器中检查缩放级别是否低于 100%(ctrl 和 - )?