我有这段代码:
<ul>
<li>
<h3><a class="title" href="page1.html">Post Title</a></h3>
<ul>
<li>
<img src="imageOne.png" alt="" />
<p>Some text.</p>
</li>
</ul>
</li>
<li>
<h3><a class="title" href="page2.html">Post Title</a></h3>
<ul>
<li>
<img src="imageTwo.png" alt="" />
<p>Some text.</p>
</li>
</ul>
</li>
<!-- [...] -->
</ul>
我想在JS / jQuery中做什么:用href
属性为a.title
的链接包装所有图像。
我在jQuery中编写了类似的内容,但结果只给出了href
的{{1}}:
a.title
$("ul li ul li img").each(function() {
$(this).wrap("<a href='" + $("ul li a.title").attr("href") + "'> </a>");
});
答案 0 :(得分:7)
这应该有效(如果您修复HTML †)。
$("ul li ul li img").each(function(){
$(this).wrap("<a href='"+ $(this).closest("li:has(h3)").find('a.title').attr("href") + "'> </a>");
});
(也可以使用li:has(a.title)
代替li:has(h3)
...)
如果您的标记是这样修复的,您还可以使用以下方法检索值:
$(this).parents('li').find('a.title').attr('href')
†:
a
元素需要结束标记。a
元素需要title
类。答案 1 :(得分:1)
当您在jQuery中使用attr或prop访问属性或属性时,它只会从选择器结果中的 first 元素中获取值。在您的情况下,您的选择器会抓取页面上的所有“ul li a.title”,因此抓取的属性仅来自第一个。
你想要的是最接近的'ul li a.title',为了实现这一点,你可以使用'最接近'的jQuery函数:
$("ul li ul li img").each(function(){
var closestHref = $(this).closest('a.title').attr('href');
$(this).wrap("<a href='"+ closestHref + "'> </a>");
});
编辑:下面的Per Felix评论,.closest()只搜索祖先。请参阅他对正确选择器的回答。
答案 2 :(得分:0)
<h3><a href="page.html">Post Title</h3>
您忘记关闭锚标记
应该是
<h3><a href="page.html">Post Title</a></h3>
看到这里,它的确有效 http://jsfiddle.net/xu6MX/
答案 3 :(得分:0)
$("ul li").each(function(){
$("ul li img",this).wrap("<a href='"+ $("h3 a.title",this).attr("href") + "'> </a>");
});
答案 4 :(得分:0)
我更新了HTML(我刚刚在第一级添加了类“文章”并关闭了标记“a”)
<ul>
<li class="article">
<h3><a class="title" href="page1.html">Post Title 1</a></h3>
<ul>
<li>
<img src="image.png" alt=""/>
<p>Some text 1</p>
</li>
</ul>
</li>
<li class="article">
<h3><a class="title" href="page2.html">Post Title 2</a></h3>
<ul>
<li>
<img src="image.png" alt=""/>
<p>Some text 2</p>
</li>
</ul>
</li>
这里是JS
$(document).ready(function() {
$(".article").each(function(){
var img = $(this).find('img');
var title = $(this).find('.title');
img.wrap("<a href='"+ title.attr("href") + "'></a>");
});
});
注意:对于这种东西,不要忘记“准备好文件”的说明