2009-04-07 9 views
3
<div>select this<strong>dfdfdf</strong></div> 
<div><span>something</span>select this<strong>dfdfdf</strong></div> 

Comment utiliser jquery ou tout simplement le javascript pour sélectionner la valeur de la balise div mais ne comprend pas les éléments enfantsjquery sélectionner le texte

//output 
select this 

Répondre

5
$("div").contents().each(function(i) { 
    //the function is applied on the node. 
    //therefore, the `this` keyword is the current node. 
    //check if the current element is a text node, if so do something with it 
}); 
+0

La fonction args sont (i, noeud), et le test est sur node.nodeName:.. $ ("div") contenu() chacune (fonction (i, noeud) { if (node.nodeName == "#text") console.log (node.textContent); }); – Chadwick

+0

la fonction est appliquée sur le noeud. par conséquent, le mot clé 'this' est le noeud actuel. – geowa4

1

Utilisation XPath, vous pouvez sélectionner uniquement le texte noeud enfants de la div. Javascript brut ci-dessous.

var xpr = document.evaluate("//div/text()",document,null, 
    XPathResult.STRING_TYPE, 
    null); 
console.log(xpr.stringValue); 

> select this 


Si vous avez un texte entrecoupé de tags:

<div>select this<strong>dfdfdf</strong>and this</div> 

... vous pouvez itérer sur eux (aide convertit XPathResult en tableau)

function $x(path, context, type) { 
    if (!context) context = document; 
    type = type || XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE; 
    var i,item,arr=[], xpr = document.evaluate(path, context, null, type, null); 
    for (i=0; item=xpr.snapshotItem(i); i++) 
     arr.push(item); 
    return arr; 
} 

var nodes = $x("//div/text()"); 
nodes.forEach(function(item) { 
    console.log(item.textContent); 
}); 

> select this 
> and this 

(testé en FF, w/firebug logging)

1

version simple JS:

function getDirectTextContent(element) { 
    var text= []; 
    for (var i= 0; i<element.childNodes.length; i++) { 
     var child= element.childNodes[i]; 
     if (child.nodeType==3)       // Node.TEXT_NODE 
      text.push(child.data); 
    } 
    return text.join(''); 
} 
Questions connexes