0

私はjQueryと少し喧嘩しています。HTML ページのコンテンツの一部に特定のクラスのスパンを挿入しようとしています。

たとえば、これは私が持っているhtmlです:

<td class="">4 <a href="#">view</a></td>

そして、私が欲しいのは

<td class=""><span class="num_cell">4</span> <a href="#">view</a></td>

これは私が作っているよりも簡単かもしれないと思います - 誰か助けてくれますか?

4

4 に答える 4

5

これも機能するはずです:

$('td').each(function(){
    $(this).contents().first().wrap("<span class='num_cell'>");
})
于 2012-11-06T14:50:22.653 に答える
1

textNode のみをカバーしたい場合は、.contents()textNodes もアイテムとして返すものを使用する必要があります。

ドキュメントhttp://api.jquery.com/contents/を確認してください。質問の正確な回答の例があります。

    $("p").contents().filter(function(){ return this.nodeType != 1; }).wrap("<b/>");

あなたのコメントの後、これにループは必要ないと思います。以下のコードを試してもらえますか?

    $("td").contents().filter(function(){ return this.previousSibling == null && this.nodeType != this.TEXT_NODE; }).wrap("<span/>");

this.previousSibling == nullそれが最初の要素であるかどうかを確認したい場合は、それが最初であることを意味します

乾杯。

于 2012-11-06T14:51:23.430 に答える
0

これを見てくださいhttp://jsfiddle.net/zkjyV/30/

$(document).ready(function() {

$("td").each(function() {

    var $div = $(this);        
    var $a = $div.find("a"); 

    $div.find(a).remove();
    var number = $div.html();

   $div.html("<span class='num_cell'>"  + number + "</span>").append($a);
});


});​

jsFiddle で実行されるように、div を使用して実行しました。しかし、div を a に置き換えることができ、問題なく動作するはずです :)

これが最終バージョンです http://jsfiddle.net/zkjyV/33/

于 2012-11-06T14:51:34.707 に答える
0

うわー..すでにたくさんの答えがあります.これは価値のあるものに対する純粋なjavascriptの答えです..セルにIDを追加して簡単にしましたが、そこから簡単に取得して汎用にすることができます..

HTML

<td class="" id="targetCell">4 <a href="#">view</a></td>​

JS:

    //get the parent reference to cache and avoid requerying the DOM
var parentCell = document.getElementById('targetCell');
// get the value of the first node (in this case TextNode)
var result = parentCell.firstChild.nodeValue;
// remove the TextNode
parentCell.removeChild(parentCell.firstChild);
// create a new span
var newSpan = document.createElement("SPAN");
//just for testing
newSpan.style.backgroundColor = 'orange';
//populate the value
newSpan.innerText = result;
//inject before the first child
parentCell.insertBefore(newSpan, parentCell.firstChild);​

JSFIDDLE: http://jsfiddle.net/RBhLB/1/

于 2012-11-06T15:19:36.823 に答える