SubSub: Show #first -6ren">
gpt4 book ai didi

jQuery - 获取类为 ".container"的 div 内的所有 div

转载 作者:行者123 更新时间:2023-12-03 21:35:27 25 4
gpt4 key购买 nike

场景:

我有一个包含链接的菜单:

Main Menu Item
--------------
Sub: Show Grid > SubSub: <a>Show #first</a>
<a>Show #second</a>
<a>Show #third</a>

现在我需要找到所有具有 css #ID 的 div,这些 div 是 .container div 内的第一级 DOM 元素。这些元素应附加到“Sub: Show Grid”并通过单击添加一个类。

<!-- The mark up -->
<div class="container">
<div id="first">1st</div>
<div id="second">2nd</div>
<div id="third">3rd</div>
</div>

问题:

  • 我如何使用 jQuery 找到带有(未定义/未知)#ID 的第一级 div?
  • 我如何与 php 中的结果交互 - 我会得到一个数组作为结果来从中构建 SubSub 菜单吗?
<小时/>

编辑#1

为了更清楚我想要做什么 - 用伪代码:

$divs_received_from_jquery_fn = 'how do I get the divs (IDs?) as array(?) and interact with them in the following code?';
foreach ( $divs_received_from_jquery_fn as $div )
{
add_menu_item( array(
'parent' => 'Sub: Show Grid'
,'name' => 'Show #'.$div
,'href' => ''
,'meta' => array(
'onclick' => 'jQuery(".container #".$div).toggleClass("showgrid");'
)
) );
}

编辑#2

“现实世界”的例子。输出是 a-link 的 onclick 事件。我的问题是,我想为 .container div 下的每个 div[id] 调用函数 foreach ,但根本不知道如何与 javascript 和 php 正确交互。

?>
<script type="text/javascript">
jQuery(".container > div[id]").each(function(){
var context = $(this);
<?php
// SHOWGRID - parts
// @since v0.3
$wp_admin_bar->add_menu( // trigger the function via the global $wp_admin_bar var that calls the class
array(
'parent' => 'showgrid' // parent menu item
,'id' => 'showgrid - ' + this.id // menu item ID
,'title' => sprintf( // menu item label
__( '%1$s show grid parts %2$s%3$s', OXO_TEXTDOMAIN )
,'<span style="background: none;">'
,'<span class="showgridparts-on hide">&#x2714;</span>'
,'<span class="showgridparts-off">&times;</span>'
)
,'href' => '' // stays empty to not trigger anything
,'meta' => array( // HERE GOES THE ACTUAL jQuery FUNCTION
'onclick' => 'jQuery("#" + this.id).toggleClass("showgrid"); jQuery(".showgridparts-on").toggleClass("hide"); jQuery(".showgridparts-off").toggleClass("hide"); return false;'
)
)
);
?>
});
</script>
<?php

最佳答案

已知 ID

$(".container > #first");

$(".container").children("#first");

或者因为 ID 在单个文档中应该是唯一的:

$("#first");

最后一个当然是最快的。

未知 ID

既然你说你不知道他们的ID,上层选择器的顶对(其中写的是#first),可以改为:

$(".container > div");
$(".container").children("div");

最后一个(前三个选择器中的)仅使用 ID 当然不可能以这种方式更改。

如果您还需要仅过滤掉那些定义 ID 属性的子 DIV 元素,您可以这样编写选择器:

$(".container > div[id]");
$(".container").children("div[id]");

附加点击处理程序

添加以下代码以将点击处理程序附加到您的任何首选选择器:

// use selector of your choice and call 'click' on it
$(".container > div").click(function(){
// if you need element's ID
var divID = this.id;
cache your element if you intend to use it multiple times
var clickedDiv = $(this);
// add CSS class to it
clickedDiv.addClass("add-some-class");
// do other stuff that needs to be done
});

CSS3 选择器规范

我还想向您指出CSS3 selector specification jQuery 使用的。它将在将来对您有很大帮助,因为可能有一些您根本不知道的选择器,并且可以让您的生活变得更加轻松。

编辑问题后

即使您编写了一些伪代码,我也不完全确定我知道您在做什么……无论如何。有些部分还是可以回答的:

$(".container > div[id]").each(function(){
var context = $(this);
// get menu parent element: Sub: Show Grid
// maybe I'm not appending to the correct element here but you should know
context.appendTo(context.parent().parent());
context.text("Show #" + this.id);
context.attr("href", "");
context.click(function(evt){
evt.preventDefault();
$(this).toggleClass("showgrid");
})
});

最后的上下文用法可以组合成一个链接的用法:

context.text(...).attr(...).click(...);

关于 DOM 元素

您始终可以从 jQuery 结果集中获取底层 DOM 元素。

$(...).get(0)
// or
$(...)[0]

将从 jQuery 结果集中获取第一个 DOM 元素。 jQuery 结果始终是一组元素,即使其中没​​有元素或只有一个元素。

但是当我使用 .each() 函数并提供一个将在集合中的每个元素上调用的匿名函数时,this 关键字实际上引用了 DOM 元素.

$(...).each(function(){
var DOMelement = this;
var jQueryElement = $(this);
...
});

我希望这能为您清除一些事情。

关于jQuery - 获取类为 ".container"的 div 内的所有 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5977699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com