$().next()多次返回相同的元素
$().next() returning the same element multiple times
我尽力为标题命名。这对我来说有点难解释。
我有一些代码的问题,我正在写(它运行在我的wordpress网站上的一个小部件)。我在这里所写的内容模拟了这个问题。仅供参考,我对jquery, JS等非常陌生。
我要做的是将变量"thumb"设置为"widget-code"之后的元素。它可以工作,但是它只在"wordpress-post1"
中找到元素("thumb-class")控制台输出为:
wordpress-post1
wordpress-post1
wordpress-post1
但应该是:
wordpress-post1
wordpress-post2
wordpress-post3
这是实际代码
<div class="wordpress-post1">
<div id="widget-code">
<script>
$(document).ready(function(){
var thumb = $("#widget-code").next();
console.log(thumb[0].parentElement.className);
});
</script>
</div>
<div class="thumb-class">
</div>
</div>
<div class="wordpress-post2">
<div id="widget-code">
<script>
$(document).ready(function(){
var thumb = $("#widget-code").next();
console.log(thumb[0].parentElement.className);
});
</script>
</div>
<div class="thumb-class">
</div>
</div>
<div class="wordpress-post3">
<div id="widget-code">
<script>
$(document).ready(function(){
var thumb = $("#widget-code").next();
console.log(thumb[0].parentElement.className);
});
</script>
</div>
<div class="thumb-class">
</div>
</div>
我要试着再澄清一点:
这段代码被放置在我使用的wordpress主题提供的html小部件中。它钩在每根柱子上。这是我唯一能放代码的地方,也是我唯一写过的代码。(我没有以任何方式改变主题的文件)
我无法控制类或id的名称。它们是动态的。可以存在无限数量的职位。因此,我不能硬编码任何东西。
为了使这段代码正常工作,它需要在它运行的帖子中找到"widget-code"元素的兄弟元素。
这是JSFiddle上的代码链接:http://jsfiddle.net/pattnvy3/
感谢您对此事的帮助。
如果你想要一个令人讨厌的黑客,试试
<div class="wordpress-post1">
<div id="widget-code">
<script>
$(document).ready(function(){
var c = window['widget-code-counter'] || 0;
window['widget-code-counter'] = ++c;
var className = 'wordpress-post' + c;
console.log(className);
});
</script>
</div>
<div class="thumb-class">
</div>
</div>
演示:小提琴
它将给出容器类wordpress-post1
,然后您可以使用它来查找任何后代元素。
根据立即的注释,对多个元素使用id是无效的标记。也就是说,将id更改为这样的类:
<div class="wordpress-post[some-number-here]">
<div class="widget-code">
</div>
<div class="thumb-class">
</div>
</div>
将允许你像这样设置一个jQuery选择器:
$('.widget-code').each(function (){
var thumb = $(this).next();
console.log(thumb[0].parentElement.className);
});
然而,如果我可以提出一个建议,我会说你用"wordpress-post"类标记你的每个wordpress-postdiv,然后有一个更具体的id,这是你想要打印的值。
那么它看起来就像这样:
<div id="wordpress-post[some-number-here]" class="wordpress-post">
<div class="widget-code">
</div>
<div class="thumb-class">
</div>
</div>
和你的javascript像这样(使用jQuery):
$('.widget-code').each(function (){
var post = $(this).closest('.wordpress-post');
console.log(post.attr('id'));
});
或者更简单:
$('.wordpress-post').each(function (){
console.log($(this).attr('id'));
});
取决于你的需要。如果你对你需要什么有任何疑问,请随时发表评论,我会尽快回复你。
纯javascript方法:
这只是一个变通方法,因为您无法控制ids
或classes
,这将针对页面上的所有div元素,通过它们循环并搜索类名称中包含wordpress-post
的任何元素。
window.onload=function(){
var posts=document.getElementsByTagName('div');
for(var i=0; i<posts.length; i++){
if(posts[i].className.indexOf("wordpress-post")> -1){
console.log(posts[i].className);
//Snippet Use
alert(posts[i].className);
}
}}
<div class="wordpress-post1">
<div id="widget-code"></div>
<div class="thumb-class"></div>
</div>
<div class="wordpress-post2">
<div id="widget-code"></div>
<div class="thumb-class"></div>
</div>
<div class="wordpress-post3">
<div id="widget-code"></div>
<div class="thumb-class"></div>
</div>
如果你有任何问题,请在下面留言,我会尽快回复你。
我希望这对你有帮助。编码快乐!
如果你想有多个id,这可以帮助你:
$(document).ready(function(){
$("[id^=widget-code]").each(function(){
console.log(this.parentElement.className);
});
});
但是,仍然不建议使用多个相同的id。
小提琴
Update:声明全局变量var i=0;
并保持自增,如下:
<div class="wordpress-post1">
<div id="widget-code">
<script>
var i=0;
$(document).ready(function(){
var thumb = $("[id^=widget-code]").next();
console.log(thumb[i++].parentElement.className);
});
</script>
</div>
<div class="thumb-class">
</div>
</div>
<div class="wordpress-post2">
<div id="widget-code">
<script>
$(document).ready(function(){
var thumb = $("[id^=widget-code]").next();
console.log(thumb[i++].parentElement.className);
});
</script>
</div>
<div class="thumb-class">
</div>
</div>
<div class="wordpress-post3">
<div id="widget-code">
<script>
$(document).ready(function(){
var thumb = $("[id^=widget-code]").next();
console.log(thumb[i++].parentElement.className);
});
</script>
</div>
<div class="thumb-class">
</div>
</div>
- CKEditor Widget-阻止编辑可编辑元素本身
- 使用next()的jQuery目标元素不起作用
- 使用表时,Jquery Next()未正确突出显示下一个元素
- Jquery使用next()选择右侧元素
- 为什么 .next('li:visible') 或 .prev('li:visible') 不能跳过不可见的元素
- 使 .next() 元素滑动使用 jquery 正确切换
- 使用next()跳过一个元素
- 如何在多个元素上使用.next()
- 使用next和previous按钮循环浏览li元素
- 如果在已经是最后一个元素上调用jQuery.next方法,那么它会返回什么
- 如何使用Jquery each()方法遍历列表中的next/PPrevious 3元素
- jQuery获取Prototype框架中属性的next元素
- 显示前5个子元素,并隐藏他们时,next按钮点击和显示下5与jquery
- 如何使用jquery将next元素的id设置为链接的href属性
- jQuery .next().not()不能查找动态创建的元素
- Jquery关注的是带有input子元素的next td元素
- 我使用jquery next和cost选项只选择一个元素,但这适用于每个元素的类
- 如何在Jquery中使用prev和next(以及next's next)显示元素ID
- ReactJS的onClick .next()元素具有相同的类
- $().next()多次返回相同的元素