0

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

结果应该是:

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

实际结果:

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

由于某种原因,条件运算符没有返回我的错误语句。那或者编码是错误的,就像我之前使用了错误的选择器一样。真的吗?我很好奇为什么我的条件运算符不正确。我是条件运算符的新手,所以也许它总是返回 true 或者我不确定。

4

4 回答 4

1

$('span strong')返回一个 JavaScript 对象。JavaScript 对象总是等同于,true因为它们不是未定义的。相反,您想要的是所述对象的长度属性。

var checkIt = strong.length ? strong : notstrong;

编辑:这仍然不会做你想做的事,逻辑错误比这更深。

要实现您提出的目标,您可以简单地执行以下操作:

$('a[href^="/u"] strong').before('<span>Hello</span>');
于 2013-08-05T19:25:11.670 回答
1

如果您的问题并不比您的代码建议的更复杂,您可以这样做:

$('a[href="/u"] > span').prepend('<span>Hello</span>');
于 2013-08-05T19:32:40.810 回答
1

我不太清楚最终的结果,但如果你想确定在 html 块的上下文中某些东西是否强大,你必须给它更细化的上下文。通过检查 $('span strong') 是否存在,它将始终返回 true。即使您执行 $('span strong').length ,它也将始终返回 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/

于 2013-08-05T19:37:11.450 回答
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>
于 2013-08-05T19:45:37.350 回答