2016-06-05 14 views
7

Po uzyskaniu odwołania do określonego elementu DOM (np. <mark>), w jaki sposób możemy uzyskać pełne słowo zawierające ten element?Uzyskaj pełne słowo zawierające określony element

Na przykład:

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

spodziewam się uzyskać następujące dane wyjściowe:

  • Pierwszy <mark>: Hello
  • drugie: World
  • trzecie: Hello
  • czwarte: 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>!

Odpowiedz

5

Jeśli potrzebujesz szybki i zwarty kod (one-liner), spróbuj tego:

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 (z logowania do konsoli i komentarze)

+0

Mogę zrobić to tak szybko, jak jest, ale bardziej czytelne, jeśli chcesz – Max

Powiązane problemy