Reputation: 1071
In this plunk I have a div
that contains some text and a span
, also with text.
My objective is to change the text of the div
, without changing the text of the span
.
I tried with jQuery but the problem is that the entire div
text changes, replacing also the span
text, any ideas?
HTML
<div id="id1">some text to change <span>THIS TEXT STAYS</span></div>
Javascript:
$( document ).ready(function() {
var id1 = $("#id1");
id1.text("New Text");
});
Upvotes: 30
Views: 8308
Reputation: 879
Html:-
<div id="id1">some text to change <span>THIS TEXT STAYS</span></div>
Jquery:-
$( document ).ready(function() {
var abcd = $('span').text();
$("#id1").html("New Text "+'<span>'+abcd+'</span>');
});
We can reconstruct the entire required DOM by getting the span tage text()
Please check the Updated Fiddle
Upvotes: -1
Reputation: 20737
I know you've already accepted an answer but I figured for the sake of diversity I could show you a jQuery solution:
html
<div id="id1">
some text to change <span style='color:red;font-weight:bold;'>THIS TEXT STAYS</span>
</div>
jQuery 1.12.4
var $id1 = $('#id1');
var $span = $id1.find('span');
$id1.text('New Text'); // or $id1.html('New Text'); // your choice
$id1.append($span);
This is probably not the most efficient solution but it gets the job done.
Upvotes: 0
Reputation: 3461
Try this code,
var id = document.getElementById('id1');
var newText = id.childNodes[0];
newText.nodeValue = 'Replaced by me ';
<div id="id1">some text to change <span>THIS TEXT STAYS</span></div>
Upvotes: 3
Reputation: 93173
Use outerHTML
:
$('#id1').html("New Text "+$('#id1 span')[0].outerHTML)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="id1">some text to change <span>THIS TEXT STAYS</span></div>
Upvotes: 1
Reputation: 11502
Please have a look at this approach:
$( document ).ready(function() {
$("#id1").contents().get(0).nodeValue = "New Text 1 "
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div id="id1">some text to change <span>THIS TEXT STAYS</span></div>
Upvotes: 10
Reputation: 1074058
This is one of the rare places jQuery doesn't do much for you. You want to go straight to the Text
node in that div
:
$( document ).ready(function() {
var id1 = $("#id1");
// The [0] accesses the raw HTMLDivElement inside the jQuery object
// (this isn't accessing internals, it's documented).
// The `firstChild` is the first node within the `div`, which is
// the text node you want to change. `nodeValue` is the text of the
// Text node.
id1[0].firstChild.nodeValue = "New Text";
});
<div id="id1">some text to change <span>THIS TEXT STAYS</span></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
Or without using jQuery (other than ready
) at all:
$( document ).ready(function() {
var id1 = document.getElementById("id1");
id1.firstChild.nodeValue = "New Text";
});
<div id="id1">some text to change <span>THIS TEXT STAYS</span></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
Upvotes: 35