javascript - jQuery - 将数据从 jQuery 函数传递到特定的 div?

标签 javascript jquery html css

我试图将数据从一个函数传递到一个特定的 div,但我似乎无法让它工作。我正在制作一个画廊查看器,我只想传递我用来显示页面中每个画廊的图片和文件总数的计数器。

代码如下:

jQuery

$(document).ready(function () {
    $('.photoset').each(function () {
        $(this).data('counter', 0);
        $items = $(this).find('img')
        $(this).data('numItems', $items.length);
    });



    var showCurrent = function (photoset) {
        $items = photoset.find('img');
        var counter = photoset.data('counter');
        var numItems = $items.length;
        var itemToShow = Math.abs(counter % numItems);

        $items.fadeOut();
        $items.eq(itemToShow).fadeIn();
    };

    $('.photoset').on('click', function (e) {
        e.stopPropagation();
        var photoset = $(this);
        var pWidth = photoset.innerWidth();
        var pOffset = photoset.offset();
        var x = e.pageX - pOffset.left;
        if (pWidth / 2 > x) {
            photoset.data('counter', photoset.data('counter') - 1);
            if (photoset.data('counter') < 0)
                photoset.data('counter', photoset.data('numItems') - 1);
            showCurrent(photoset);
        } else {
            photoset.data('counter', photoset.data('counter') + 1);
            if (photoset.data('counter') > photoset.data('numItems') - 1)
                photoset.data('counter', 0);
            showCurrent(photoset);
        }
        $(this).text(photoset.data('counter') + 1 + " de " + photoset.data('numItems'))
    });
});

HTML Razor

<div class="container">
    @{ var i = 10; }
    @foreach (var item in Model)
    {
        <div class="row">
            <div class="col-md-4 col-md-offset-4 text-center">
                <br />
                @Html.DisplayFor(modelitem => item.NomeGaleria)
                <br />
            </div>
        </div>
        <div class="row"><div class="col-md-4 col-md-offset-4 text-center"><div class="nav-informer"></div></div></div>
        <div class="row">
                <div class="photoset center-block">


                    @{ var item2 = item.FilePaths;}
                    @for (var k = 0; k < Enumerable.Count(item2); k++)
                {
                        <br />
                        <img src="~/images/@Html.DisplayFor(modelItem2 => item2[k].FileName)" style="@(k != 0 ? "display: none" : "" ) " />
                        <br />
                    }

                </div>

        </div>

    }
</div>

所以我正在尝试使用这段代码

$(this).text(photoset.data('counter') + 1 + " de " + photoset.data('numItems'))

将数据传递给“nav-informer”div,但它不会起作用。有谁知道在这种情况下该怎么办?抱歉,如果这是一个愚蠢的问题,我是 jQuery 的新手。

更新

这是呈现的 HTML 页面:

<div class="container">

    <div class="row">
        <div class="col-md-4 col-md-offset-4 text-center">
            <br />
            Galeria Um
            <br />
        </div>
    </div>
    <div class="row"><div class="col-md-4 col-md-offset-4 text-center"><div class="nav-informer"></div></div></div>
    <div class="row">
            <div class="photoset center-block">



                    <br />
                    <img src="/images/572fdd6b-13eb-48d2-8940-23da73e056c0.JPG" style=" " />
                    <br />
                    <br />
                    <img src="/images/018a55be-a8a7-4412-8415-1678d01eb6a2.JPG" style="display: none " />
                    <br />
                    <br />
                    <img src="/images/e5b0bdcb-d517-49a5-818b-245d46c0a0d9.JPG" style="display: none " />
                    <br />

            </div>

    </div>
    <div class="row">
        <div class="col-md-4 col-md-offset-4 text-center">
            <br />
            Galeria Dois
            <br />
        </div>
    </div>
    <div class="row"><div class="col-md-4 col-md-offset-4 text-center"><div class="nav-informer"></div></div></div>
    <div class="row">
            <div class="photoset center-block">



                    <br />
                    <img src="/images/fdc2e9fd-978a-4150-87af-483e34f68798.JPG" style=" " />
                    <br />
                    <br />
                    <img src="/images/b17d169d-e5ed-45cd-9901-1d9dc294c873.JPG" style="display: none " />
                    <br />
                    <br />
                    <img src="/images/3ad1ae20-7102-4d69-b658-7b3d8cbfb9e8.JPG" style="display: none " />
                    <br />
                    <br />
                    <img src="/images/4ef03a84-da00-4f93-b3a2-839ac2ec9ac2.JPG" style="display: none " />
                    <br />

            </div>

    </div>

最佳答案

因此,由于您是 jQuery 的新手,所以 $(this) 的使用基本上意味着“我已经开始处理的元素”,在您的情况下是 。照片集。所以 $(this) = $('.photoset')

如果你想让那行文本进入你的 .nav-informer div,你需要将 $(this) 更改为 $(' .nav-informer')

$('.nav-informer').text(photoset.data('counter') + 1 + " de " + photoset.data('numItems'));

更新

所以看起来你需要遍历层次结构。每个“画廊”都是一个 .container 吗?如果是这样,试试这个:

$(this).closest('.container').find('.nav-informer').text(photoset.data('counter') + 1 + " de " + photoset.data('numItems'));

.closest() 向上遍历层次结构,试图找到与您开始的元素最近的父级。 (在我们的例子中是 $(this))。

'.find()' 做相反的事情,它向下遍历层次结构以从之前的点找到相关元素的第一个实例。

将它们加在一起,我喜欢做的是 .closest() 到您要查找的元素的父级和 .find() 元素在那之后。我觉得 .parents().children().siblings() 变得很乱。

更新 2

好吧,我现在明白了 - 你导出每个画廊的方式最终可能会有点冒险,如果可能的话,我建议将你的画廊和线人放在同一个容器中,但如果你要离开它像这样,试试这个:

$(this).closest('.row').prev('.row').find('.nav-informer').text(photoset.data('counter') + 1 + " de " + photoset.data('numItems'));

因此,使用 .parent() 将仅遍历单个父级,如果您需要更上层,您可以使用 .parents()(带有S) 或我最喜欢的 .closest()。然后,一旦你达到你需要去的水平,你可以使用 .siblings(),或者在我们的例子中,因为你的 .nav-informer 总是.photoset 之前的.row 中,您需要使用.prev()。这将选择直接在您当前所在的 div 之前写入的 div,处于同一级别。

检查 This Fiddle看一个简单的例子。

关于javascript - jQuery - 将数据从 jQuery 函数传递到特定的 div?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34938944/

相关文章:

jquery - Rails 4中如何自动填充选择框?

javascript - 时间跨度 JavaScript

javascript - 检查子元素是否与父元素具有相同的类并删除子元素 - jQuery

javascript - extjs中grid的汇总行添加点击事件

javascript - 按最接近 x 的值对对象数组进行排序

javascript - 如何重复div类?

jquery - 背景大小过渡到另一个页面

javascript - 避免 JavaScript 插件版本冲突

javascript - Chrome 扩展程序 : Open new tab and click on button

javascript - 将名称添加到数据表列的按钮