HTML:
<a href="/u"><span>Text</span></a>
<a href="/u"><span><strong>Text</strong></span></a>
<a href="/u"><span><strong>Text</strong></span></a>
<a href="/u"><span>Text</span></a>
var strong = $('span strong'),
notstrong= $('span'),
a = $('a[href^="/u"]');
for(var i=0;i<a.length;i++){
var checkIt = strong ? strong : notstrong;
$(a[i]).find(checkIt).before('<span>Hello</span>');
}
OutCome应该是:
<a href="/u"><span><span>Hello</span>Text</span></a>
<a href="/u"><span><span>Hello</span><strong>Text</strong></span></a>
<a href="/u"><span><span>Hello</span><strong>Text</strong></span></a>
<a href="/u"><span><span>Hello</span>Text</span></a>
实际OutCome:
<a href="/u"><span>Text</span></a>
<a href="/u"><span><span>Hello</span><strong>Text</strong></span></a>
<a href="/u"><span><span>Hello</span><strong>Text</strong></span></a>
<a href="/u"><span>Text</span></a>
由于某种原因,条件运算符没有返回我的false语句。那个或编码是错误的,就像我以前使用错误的选择器一样。真的吗?我很好奇为什么我的条件运算符不正确。我是条件运算符的新手所以也许它总是返回true或者我不确定。
答案 0 :(得分:1)
$('span strong')
返回一个JavaScript对象。 JavaScript对象始终等同于true
,因为它们未定义。你想要的是所述对象的长度属性。
var checkIt = strong.length ? strong : notstrong;
编辑: 这仍然不会做你想做的事情,逻辑错误比这更深。
为了实现您提出的目标,您可以简单地执行此操作:
$('a[href^="/u"] strong').before('<span>Hello</span>');
答案 1 :(得分:1)
如果您的问题没有代码建议的那么复杂,您可以这样做:
$('a[href="/u"] > span').prepend('<span>Hello</span>');
答案 2 :(得分:1)
我不太了解最终游戏,但是如果你想确定html块的上下文中某些东西是否强大,你必须给它更细粒度的上下文。通过检查是否存在$('span strong'),它将始终返回true。即使你做$('span strong')。长度总是会返回true,因为它正在整个块中移动。
这是一个示例,其中每行检查强,而不是整个块。所以在这种情况下,只有当该行内部具有强大的内容时,它才会返回true。
for(var i=0;i<a.length;i++){
var checkIt = $(a[i]).find(strong).length ? strong : notstrong;
$(a[i]).find(checkIt).before('<span>Hello</span>');
}
答案 3 :(得分:1)
为了在找到强标记时让跨度保持嵌套在原始跨度内,您必须将方法从之前更改为前置。
$('a[href^="/u"]').each(function(){
if($(this).find('span strong').length > 0){
$(this).find('span strong').before('<span>Hello</span>');
return false;
}
$(this).find('span').prepend('<span>Hello</span>')
});
如果你没有前置,你最终会得到
的结果<a href="/u">
<span>Hello</span>
<span>Text</span>
</a>
而不是
<a href="/u">
<span>
<span>Hello</span>
"Text"
</span>
</a>