2016-06-05 22 views
7

Avendo il riferimento a un elemento DOM specifico (ad esempio <mark>), come possiamo ottenere la parola completa contenente quell'elemento?Ottieni parole complete contenenti un elemento specifico

Ad esempio:

H<mark>ell</mark>o Wor<mark>l</mark>d, and He<mark>llo</mark>, <mark>Pluto</mark>! 

mi aspetto di ottenere il seguente risultato:

  • Prima <mark>: Hello
  • Secondo: World
  • Terzo: Hello
  • Quarto: Pluto

var $marks = $("mark"); 
 

 
var tests = [ 
 
    "Hello", 
 
    "World", 
 
    "Hello", 
 
    "Pluto", 
 
]; 
 

 
function getFullWord($elm) { 
 
    // TODO: How can I do this? 
 
    // \t \t This is obviously wrong. 
 
    return $elm.html(); 
 
} 
 

 
var $marks = $("mark"); 
 
tests.forEach(function(c, i) { 
 
    var word = getFullWord($marks.eq(i)); 
 
    if (word !== c) { 
 
    alert("Wrong result for index " + i + ". Expected: '" + c + "' but got '" + word + "'"); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
H<mark>ell</mark>o Wor<mark>l</mark>d, and He<mark>llo</mark>, <mark>Pluto</mark>!

risposta

5

Se avete bisogno di codice veloce e compatta (one-liner), provate questo:

var $marks = $('mark'); 

$marks.each(function() { 
    var wholeWord = (this.previousSibling.nodeValue.split(' ').pop() + 
        this.textContent + 
        this.nextSibling.nodeValue.split(' ')[0] 
        ).replace(/[^\w\s]/gi, ''); 
}); 

JSFiddle (con la registrazione in console e commenti)

+0

Posso renderlo veloce come è, ma più leggibile se vuoi – Max