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>

何らかの理由で、条件演算子が false ステートメントを返していません。以前に間違ったセレクターを使用していたように、それまたはコーディングが間違っています。本当?条件演算子が正しくない理由が気になります。私は条件演算子が初めてなので、常に true を返すか、正確にはわかりません。

4

4 に答える 4

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 に答える
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

$('span strong')JavaScript オブジェクトを返します。trueJavaScript オブジェクトは未定義ではないため、常に同等です。代わりに必要なのは、前述のオブジェクトの長さプロパティです。

var checkIt = strong.length ? strong : notstrong;

編集:これはまだあなたがやりたいことをしません。論理エラーはこれよりも深いです。

提示した目標を達成するには、次のようにするだけです。

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