8

次のようなテキスト文字列を含むdiv内のすべてのhtml要素の配列を作成したい

<p>some string</p>.  

文字列を取得したくないので、配列アイテムを要素にします(この例では、pノードになります)。文字列がどうなるかは前もってわからないので、一致する文字列値を探すことができません。また、空のテキストノードが配列に含まれることも望ましくありません。

ありがとう!

4

8 に答える 8

11
$("#my_div *").filter(function()
{
     var $this = $(this);
     return $this.children().length == 0 && $.trim($this.text()).length > 0;
})

このバージョンでは、テキストを含む要素を含む親要素は返されず、最後のレベルの要素のみが返されます。

最速ではないかもしれませんが、StackOverflowのホームページでは非常にうまく機能します:)

于 2009-06-19T17:54:37.383 に答える
7

カスタムセレクターは、次の場合に役立ちます。

jQuery.expr[':'].hasText = function(element, index) {
     // if there is only one child, and it is a text node
     if (element.childNodes.length == 1 && element.firstChild.nodeType == 3) {
        return jQuery.trim(element.innerHTML).length > 0;
     }
     return false;
};

その後、あなたは単にこれを行うことができます:

$('#someDiv :hasText') // will contain all elements with text nodes (jQuery object)
$('#someDiv :hasText').get() // will return a regular array of plain DOM objects

私はあなたがそれらの中にテキストだけを持っている要素だけを選択しようとしていると仮定しています。

于 2009-06-19T17:04:14.077 に答える
2

notおよび空のセレクターを使用して、空でない要素を取得できます。配列への変換は、getを使用して実現できます。

$("#theDiv > :not(:empty)").get();

上記のセレクターは、「theDiv」のすべての子要素を取得し、それらは空ではありません(つまり、子またはテキストのいずれかを持っています)。次に、一致したセットを配列に変換します。

内部にテキストがある要素のみが必要な場合、これは機能するはずです...

$("#theDiv > :not(:empty, :has(*))").get();

空白のある要素を取り除くには、フィルターを使用できます

$("#theDiv > :not(:has(*))").filter(function() { 
                 return $.trim(this.innerHTML).length > 0;
         }).get();
于 2009-06-19T16:55:29.453 に答える
1

を循環して、 .text()値を持つすべてのものを取得できます!= ""

于 2009-06-19T16:31:29.387 に答える
1
var array = [];
var divSelector = "div.mine";

$(divSelector).contents().each(function()
{
   // If not an element, go to next node.
   if (this.nodeType != 1) return true;       

   var element = $(this);
   if ($.trim(element.text()) != "")
     array.push(element);
});

arrayは、テキストを含む要素の配列です。

于 2009-06-19T16:45:32.787 に答える
0

dは、物事を検索するdivです。v
は空の配列
です。iは0から開始する必要があります。

$ .trimは、空白だけのノードを取得しないようにするために使用されます。

$("*",d).filter( function() { 
     return $.trim($(this).text()) != ""
  } ).each( function() { 
     v[i] = $(this).text(); 
     i++; 
  } );

v.push($(this))を使用することもできます...これは完全に私の心を滑らせたものです。

于 2009-06-19T16:40:32.037 に答える
0
 $(function() {
        var array = new Array();
        $("#testDiv *").each(function(x, el) {

            if ($.trim($(el).text()) != '' ) {
                array.push(el);
            }
        });
        alert(array.length);
    });
于 2009-06-19T16:47:10.867 に答える
0

:containsセレクターを使用します。

var matches = new Array();
$('#start_point *:contains(' + text + ')').each(function(i, item) {
 matches.push( item );
}
于 2009-06-19T17:17:23.340 に答える