我有一个内容可编辑的div,它可以包含任何标签,例如
<p>hello</p>
<p>whatever <p>nested p is a bad idea but can happen</p></p>
<div>stuff</div>
<p>test<img></p>
对于给定元素,我需要在源顺序中找到它上面的img标记。图像标签可以是直接兄弟,也可以是兄弟的孩子,甚至是给定元素的父母。
答案 0 :(得分:1)
这是一个非常简单的递归函数,它可以做你想要的并且通常可以工作。
function findPreceeding(element, targetType) {
var target = element.prev(targetType);
if (target.length > 0 || element.parent().length === 0)
return target;
else
return findPreceeding(element.parent(), targetType);
}
$(function() {
console.log(findPreceeding($("#div1"), "img").toArray());
console.log(findPreceeding($("#div2"), "img").toArray());
console.log(findPreceeding($("#div3"), "img").toArray());
console.log(findPreceeding($("#div4"), "img").toArray());
});
&#13;
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div>
<img id="img1" src="http://lorempixel.com/50/50/" />
<div id="div1">
<img id="img2" src="http://lorempixel.com/50/50/" />
<div id="div2">
<img id="img3" src="http://lorempixel.com/50/50/" />
<div id="div3">
<div id="div4">
</div>
</div>
</div>
</div>
</div>
&#13;