문제

I want to change the text inside a li. But this li has got an img. Here the html:

<div>
<ul>
<li><b><img src="../../../Images/folder1/image1.png">Text1</b><i>0</i></li>
<li><b><img src="../../../Images/folder1/image2.png">Text2</b><i>1</i></li>
<li><b><img src="../../../Images/folder1/image3.png">Text3</b><i>2</i></li>
<li><b><img src="../../../Images/folder1/image4.png">Text4</b><i>3</i></li>
<li><b><img src="../../../Images/folder1/image5.png">Text5</b><i>4</i></li>
</ul>
</div>

I am trying this:

$("li").each(function () {
$(this).text(sometext);
})

But it is replacing all, including the img. I only want to change the text: Text1,Text2,...

Any ideas?

Thanks!

도움이 되었습니까?

해결책

To get to the textnodes within an element you need to use contents() and then filter() by nodeType. You can then use replaceWith() to change the text. Try this:

$('li:first b').contents().filter(function() {
    return this.nodeType == 3;
}).replaceWith('foo');

Example fiddle

I obviously hard-coded this to use the first li element, but you can change the selector as needed.

다른 팁

You could also do it like this:

http://jsfiddle.net/YNLXQ/

$("li b").each(function () {
   this.childNodes[1].textContent = "32323";
})

Store the image in a separate variable and after replacing the text prepend the image back.

$("li b").each(function () {
    var $img = $(this).find('img'); 
    $(this).text(sometext).prepend($img);
})
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top