12
votes

Obtenir la première ligne de texte dans un élément jQuery

J'ai un exemple d'élément comme celui-ci: xxx

Il peut aussi ressembler à ceci: xxx

Je veux obtenir le premier ligne (définition de la ligne lâchement) (bla bla bla.) de texte à l'intérieur de l'élément. Il pourrait être enveloppé à l'intérieur d'un élément enfant ou juste être nue TextNode. Comment je fais ça? Merci.


0 commentaires

5 Réponses :


1
votes

d'abord obtenir le contenu de l'élément xxx

puis diviser le texte en une matrice à l'aide de la pause de la ligne xxx

la première partie de La matrice est la première ligne de l'élément xxx


1 commentaires

J'ai pensé d'abord, quelle ligne, mais je vois en FX au moins il y a. Il est toutefois dangereux de compter sur. Voici la première ligne: alerte ($ ("# élément"). Texte (). Split (/ \ n /) [1]) Le [0] Th est une chaîne vide ... jsfiddle.net/mplungjan/qqusp



3
votes

Voici une idée pour vous. Bien sûr s'il y a un élément H4 avant la ligne que vous souhaitez obtenir:

var content = $('#element').html();
var arr = content.split('<h4>');
console.log(arr[0]);


0 commentaires

2
votes
/\s*</.test(myElement.html())

2 commentaires

Ne fonctionne pas pour le premier cas, je crois, cela correspondra à l'en-tête plutôt que le bla bla blaha (aurait peut-être dû choisir un meilleur exemple de texte lol)


Si vous obtenez

myText il est assez difficile. Vous avez besoin de quelque chose de voyager récursivement à travers le DOM, je suppose. Comment fonctionne-t-il des balles?



16
votes

Utilisez le Contenu () Code> [docs] I> sup> méthode pour obtenir tous les enfants, y compris les nœuds de texte, filtrer tous les nœuds vides (ou espaces uniquement), puis saisissez le premier de l'ensemble.

var first_line = $("#element")
                       .contents()
                       .filter(function() { 
                           return !!$.trim( this.innerHTML || this.data ); 
                       })
                       .first();


9 commentaires

Merci, cependant pour moi, cela retourne un objet plutôt que du texte, devrais-je juste avant [0]?


Oui, cela vous donne un objet JQuery avec l'élément ou le noeud de texte. Si vous souhaitez le contenu du texte, utilisez first_line.text () . Si vous voulez vous éloigner de la tête et de la trailing WhitSpace, faites $. Trim (first_line.text ()) .


Salut pouvez-vous expliquer pourquoi vous revenez !!? Quel est !!?


Il convertit en équivalent booléen de la valeur. Après la coupe, si .innerHTML ou .data retourne une chaîne vide, !! convertir en booléen false , parce qu'une chaîne vide est considérée comme une valeur « Falsey ». Toute chaîne non vide entraînera true . title="can quelqu'un expliquer ce double négatif stackoverflow.com / questions / 4686583 / ...


+1 De moi, mais la performance-Warie peut vouloir envisager d'utiliser $. Chaque () plutôt que filtre () . C'est un peu tard dans la journée pour moi, mais un exemple de ceci est jsfiddle.net/andye/yftnh / 3 (ignorer la révision 2, je suis à moitié endormi ici!)


@Andy e Avez-vous un lien ou quelque chose qui explique la signification du filtre VS chacune des performances?


@Andy E: Nice. Excellente utilisation de l'opérateur des virgules aussi. @Harry: Cela vous permet d'arrêter la boucle une fois que vous avez trouvé un nœud non vide. Avec .filter () Vous devez laisser la boucle exécuter pour chaque élément que .Contents () retourne.


@Harry: À peu près ce que @Patrick_DW a dit. Si le contenu de l'élément s'avère être de 200 nœuds, la fonction Filtre () est exécutée sur chacun de ces nœuds. Chaque () peut être cassé de sorte qu'il s'arrête en cours d'exécution après avoir trouvé ce que vous recherchez.


@Andy E: Pour le plaisir, voici une seule virgule retour!



1
votes

Le compteur commence à 1 xxx


0 commentaires