【问题标题】:Jquery - Reuse Function Multiple Times With One Dynamic ValueJquery - 使用一个动态值多次重用函数
【发布时间】:2016-12-26 00:45:54
【问题描述】:

注意:这是我网站上页面的一个工作示例。目前它仅适用于 DayZ 部分。 https://www.brotherhoodgaming.net/reddit.php

编辑: 这是我点击 redditHeader 的 HTML

<div class="redditHeader grey3">
        <p class="white floatleft">
            DayzUnderground
        </p>
        <i class="material-icons redditHeaderCollapse">
            arrow_drop_down
        </i>
    </div>

在过去几个月里,在 StackOverflow 的帮助下,我已经构建了我的第一个网站的框架。我有一个庞大的 Jquery JSON 函数,它可以根据 subreddit 的 URL 从 reddit 中提取数据。我也有 3 个&lt;div&gt;DayzBuildaPCSalesBronies 作为测试)。

当我点击任何这些栏时,我希望我的 Javascript 函数从'https://www.reddit.com/r/' + encodeURIComponent(subreddit) + '.json' 动态加载数据 - (subreddit) 是&lt;div&gt; 的 val() 文本。在这个例子中,如果我点击“Dayz”,我希望 reddit 从r/dayz.json 加载数据,而无需在代码中手动输入 URL。

这是我的 javascript 函数。它目前成功地适用于我手动输入 URL 的任何 reddit。

<script>
$('.redditHeader').click(function() {
    var subreddit = $(this).children('.redditBanner').text();
    loadRedditData(subreddit);
});

function loadRedditData(subreddit) {
    $.getJSON('https://www.reddit.com/r/' + encodeURIComponent(subreddit) + '.json').then(function (data) {
        console.log(data);
        function foo(data) {
            $.each(
                // iterate over 10 children, starting at the 0th index
                data.data.children.forEach(foo); function foo(item, index) { //SAYS I AM MISSING A ")" HERE
                    //Load reddit title in correct div//
                    $('#news' + i + ' .redditTitle').append(
                        $('<a>')
                            .attr('href', 'https://m.reddit.com/' + post.data.permalink)
                            .text(post.data.title)
                    );

                    //Load reddit Score (net UP - DOWN)//
                    $('#news' + i + ' .redditScore').prepend(
                        $('<p>')
                            .attr('class', 'redditUpvoteScore')
                            .text(post.data.score)
                    );

                    //Load reddit post-text in HTML format//
                    $('#news' + i + ' .redditPost').append(
                        $('<p>')
                            .text(post.data.selftext_html)
                    );

                    //Load sub-reddit name in HTML format//
                    /*$('#news' + i + ' .subRedditName').append(
                     $('<p>')
                     .attr('class', 'subRedditFormat')
                     .text('r/' + post.data.subreddit)
                     );*/

                    //Load post thumbnail URL into an <a> tag wrapping the image//
                    $('#news' + i + ' .redditThumbnail').append(
                        $('<a>')
                            .attr('href', post.data.url)
                            .attr('class', 'thumbURL')
                    );

                    //Load actual thumbnail into the <a> wrapper tag with the thumbURL class//
                    $('#news' + i + ' .thumbURL').append(
                        $('<img>')
                            .attr('src', post.data.thumbnail)
                            .attr('class', "image news hide floatleft")
                    );

                    //Load reddit Username and URL into container DIV//
                    $('#news' + i + ' .userNameContainer').append(
                        $('<a>')
                            .attr('class', 'redditUserName')
                            .attr('href', 'https://m.reddit.com/user/' + post.data.author)
                            .text(post.data.author)
                    );

                    // Convert post creation time to local time//
                    var utcSeconds = post.data.created_utc;
                    var d = new Date(0);
                    // The 0 is the key, which sets the date to the epoch
                    d.setUTCSeconds(utcSeconds);

                    //Use Moment.js to calculate relative date and append to DIV//
                    $('#news' + i + ' .redditDate').append(
                        moment(d).fromNow()
                    );

                    //Decodes HTML into correct format by replacing unescaped characters//
                    $('.redditPost').each(function(){
                        var $this = $(this);
                        var t = $this.text();
                        $this.html(t.replace('&lt','<').replace('&gt', '>'));
                        $this.html(t.replace('null','').replace('null', ''));
                    });

                    //Checks for "self" tagged images and replaces with placeholder image//
                    function changeSourceAll() {
                        var images = document.getElementsByTagName('img');
                        for (var i = 0; i < images.length; i++) {
                            if (images[i].src.indexOf('self') !== -1) {
                                images[i].src = images[i].src.replace("self", "css/images/default.jpg");
                            }
                        }
                        for (var i = 0; i < images.length; i++) {
                            if (images[i].src.indexOf('default') !== -1) {
                                images[i].src = images[i].src.replace("self", "css/images/default.jpg");
                            }
                        }
                        for (var i = 0; i < images.length; i++) {
                            if (images[i].src.indexOf('https://www.brotherhoodgaming.net/default') !== -1) {
                                images[i].src = images[i].src.replace("https://www.brotherhoodgaming.net/default", "css/images/default.jpg");
                            }
                        }
                    }
                    changeSourceAll();
                }
            )
        }
    });
}

这是我从 &lt;div&gt; 的“redditHeader”类中提取文本值的糟糕尝试。

$('.redditHeader').each().on('click', function (){
$('p[class="white"]').val();
})

在此先感谢您提供任何可能的帮助。我被难住了!

【问题讨论】:

    标签: javascript php jquery html json


    【解决方案1】:

    您无法获得.val()&lt;p&gt; 标签!使用.text()

    $('.redditHeader').click(function() {
      var subreddit = $(this).children('.white').text();
      loadRedditData(subreddit);
    });

    【讨论】:

    • 这太完美了,你们两个解决了我的主要问题。我只是在控制台中测试了它。我的最后一个问题是,既然它正在提取 JSON 数据,它似乎并没有执行其余的功能(将其附加到 DIV)。对此有什么想法吗?
    • @DavidWashburn 尝试改变循环方式。试试..data.data.children.forEach(foo); function foo(item, index) { .. }
    • 这看起来更接近我想要的,而不是强制 10 次迭代,我希望它继续循环,直到用完 DIV 来放置它们。但是,当我把这段代码放进去时,它说我'我错过了一个“)”,但我没有看到任何明显的地方。我已经更新了我的主页以显示新的 Javascript。抱歉,我是一个 Javascript 初学者,这个项目可能有点过头了。
    【解决方案2】:

    类似的东西应该可以工作:

    $('.redditHeader').click(function (event){
        var subreddit = $(event.currentTarget).find('.white').text();
        loadRedditData(subreddit);
     })
    

    $(event.currentTarget) 获取被点击的元素,find() 获取该元素的子元素。最后,我调用 loadRedditData(subreddit)。

    我禁止使用 each(),因为我真的不明白你试图用它来实现什么。

    【讨论】:

    • 当我点击我得到一个“undefined.json”。阅读文本似乎有问题。我已经用我的 HTML 更新了这篇文章,向你展示我所拥有的。有什么建议?谢谢!
    • 我刚刚编辑过。 val() 仅用于输入,在看到您的 html $(event.currentTarget) 或 $(this) 后更好。
    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 2012-01-28
    • 2019-11-11
    • 1970-01-01
    • 2013-06-14
    • 2012-12-29
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多