【问题标题】:Dynamic jQuery with same ID具有相同 ID 的动态 jQuery
【发布时间】:2014-04-24 13:54:50
【问题描述】:

我试图在 Wordpress 中的高级自定义字段的帮助下创建一个动态 jQuery 函数。这可能与问题无关,但无论如何我在 Wordpress 中使用这个插件。

我的代码是这样的:

<div id="restaurangmeny">

<h2>Vår meny</h2>

<? if( get_field('meny_for_restaurangen') ): ?>
<?php while( has_sub_field('meny_for_restaurangen') ): ?>

<div class="kategori">

<div class="kategorinamn" id="<?php the_sub_field('namn_for_kategorin'); ?>"><?php the_sub_field('namn_for_kategorin'); ?></div>

<div class="matratter" id="<?php the_sub_field('namn_for_kategorin'); ?>">

<? if( get_sub_field('matratter') ): ?>
<?php while( has_sub_field('matratter') ): ?>

<div class="matratt">

<div class="left">
<div class="namn"><?php the_sub_field('namn_pa_matratt'); ?></div>
<div class="beskrivning"><?php the_sub_field('beskrivning_av_matratten'); ?></div>
</div>

<div class="pris"><?php the_sub_field('pris_pa_matratten'); ?>:-</div>

</div>

<?php endwhile; ?>
<?php endif; ?>

</div>

</div>

<?php endwhile; ?>
<?php endif; ?>

</div><!--#restaurangmeny-->

所以我想要的是当我单击名为“kategorinamn”的 div 时,我希望显示或隐藏名为“matratter”的 div。这就是为什么我对“kategorinamn”和“matratter”使用相同的 id 只是因为这两个属于一起。

简单地说,如果我单击 1,我希望显示具有相同 id (1) 的所有内容。如果单击 2,我希望显示具有相同 id (2) 的所有内容。

我不知道像这样的动态 jQuery 叫什么,但我离 jQuery 还差得很远,所以这就是我问的原因。

类似http://jsfiddle.net/gwK6d/18/ 的东西,但仅使用 jQuery,这适合我上面的代码。

【问题讨论】:

  • id 值在 DOM 中必须是唯一的。重复使用相同的 id 是无效标记,将导致未定义的行为。
  • 元素 ID 是唯一的,使用重复的 ID 是犯罪!说真的,使用类而不是 ID。
  • ID 是唯一的,我上面的 php 代码将使 id 唯一。如果我在第一个循环中声明 id 为一个,我可以在第二个循环中声明相同的 id 为两个。

标签: javascript jquery wordpress advanced-custom-fields


【解决方案1】:

1) 导入 jquery

2) 确保您没有对多个元素使用相同的 id

3) 改变这一点:

<div class="kategorinamn" id="<?php the_sub_field('namn_for_kategorin'); ?>"><?php the_sub_field('namn_for_kategorin'); ?></div>
<div class="matratter" id="<?php the_sub_field('namn_for_kategorin'); ?>">

到这里:

<div class="kategorinamn" id="<?php the_sub_field('namn_for_kategorin'); ?>">
    <?php the_sub_field('namn_for_kategorin'); ?>
    <div class="matratter" id="<?php the_sub_field('namn_for_kategorin'); ?>">
</div>

4) 加载后声明这个函数:

$(".kategorinamn").click(function(){
    $(this).children('.matratter').toggle();
});

JSFIDDLE:http://jsfiddle.net/uRpc8/

【讨论】:

  • 我确定您的意思是 .kategorinamn 和 .因为这些 id 不存在?
  • 这将切换页面上的每个.matratter。我们可以看到会有几个,因为该 html 包含在 php while 循环中。使用$(this).next(".matratter").toggle() 仅定位相关内容。
  • gilly3:我想这就是 OP 所需要的——“简单地说,如果我点击 1,我希望显示所有具有相同 id (1) 的东西。”
  • @Henric (OP) 请提供更多关于你想要什么的信息。
  • 嗨! .kategorinamn 只是应该可以点击的类。我知道基本的 jQuery,上面的函数并不能解决我的问题。我上面的代码可以生成 10 个不同的 .matratter 但具有唯一 ID。这是一个循环,这就是它应该动态工作的原因。否则我必须硬编码...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 2013-11-04
  • 2011-05-01
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多