1
<div>
some text I want
<span><sup>text I don't want</sup></span>
</div>

上記はHTMLの例です。スパンにある子のhtmlテキストなしでdivのテキストだけを選択できるようにしたい。これを行う簡単な方法はありますか、それともマークアップをハックする方法を考え出す必要がありますか?

jqueryセレクターを使用してdivだけを選択しようとしましたが、.text()メソッドを呼び出すと、すべてのテキストが再び表示されます...非常に明白なものが欠けていますか?

4

6 に答える 6

2

以下のようなものがあなたにテキストを取得するはずです、

デモ

var justText = $('div').contents().filter(function () {
    if (this.nodeType == 3) return true;
}).text();

これにより、改行と空白も返されることに注意してください。

あなた$.trimはそれらを取り除くために使うことができます、

justText = $.trim(justText);
于 2012-04-17T22:16:45.297 に答える
0

これを試して:

$('div').clone().children().remove().end().text()
于 2012-04-17T22:18:24.423 に答える
0

試す:

var text = $('div').contents().get(0);
于 2012-04-17T22:17:46.490 に答える
0

例で完全に説明された答えはここで見つけることができます:http://jsfiddle.net/xHcPU/

//elem.childNodes is a NodeList containing all child nodes of the array
//This includes every node - text and elements
// https://developer.mozilla.org/En/DOM/Node.childNodes
var childNodes = document.getElementById( 'special' ).childNodes;

//arr.reduce receives an array-like object and a callback
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/Reduce

//We use func.call to call arr.reduce with the childNodes as the this variable
// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call
var out = [].reduce.call( childNodes, function ( ret, child ) {

    //if a node's nodeType is 3, you can safely say it's a text node
    // https://developer.mozilla.org/en/nodeType
    if ( child.nodeType === 3 ) {
        ret += child.nodeValue.trim();
    }
    //if it's any other node, we just ignore it
    return ret;

}, '' );

//out will now contain the string you seek

ここで使用されている2つのES5関数、Array.prototype.reduceおよびString.prototype.trimは、シム、独自の実装、または存在する場合は同等のjQueryに簡単に置き換えることができることに注意してください。同等のものは思い出せませんreduceが、存在すると思いますtrim

于 2012-04-17T22:39:47.013 に答える
0

jQueryは完全に不要です。すべてのHTMLを削除します。

var text = node.innerHTML.replace(/<.+>/, '');

jQueryを使用してデモを行い、divを選択します。

于 2012-04-17T22:45:36.370 に答える
0

直接の子ノードのテキストを収集するだけです。

function getImmediateText(el) {
  var node, nodes = el.childNodes;
  var text = '';

  for (var i=0, iLen=nodes.length; i<iLen; i++) {
    node = nodes[i];

    if (node.nodeType == 3) {
      text += node.data;
    }
  }
  // You may want to trim excess white space here
  return text;
}

これはすべてのブラウザで機能し、ライブラリのサポートは必要ありません。

于 2012-04-18T01:40:47.303 に答える