条件运算符false值似乎没有运行

时间:2013-08-05 19:21:28

标签: javascript jquery for-loop conditional conditional-operator

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或者我不确定。

4 个答案:

答案 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>');
}

http://jsfiddle.net/S8XP4/

答案 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>