2012-03-19 4 views
1

Мы столкнулись со следующей ситуацией, пытаясь внести изменения в веб-страницу.Изменить div-текст, когда div содержит другие элементы.

<div id="div1"> 
    Welcome <button id="clicker">Click Me</button> 
</div> 

Это, конечно же, просто базовый пример того, с чем мы столкнулись. Все, что мы хотим сделать, это изменить текст div без потери button. Например, вместо Добро пожаловать, мы хотели бы, чтобы он сказал Hi.

Есть ли простой способ сделать это с помощью jQuery? Я пробовал использовать .replace, но это, похоже, не сработало.

$("#div1").text().replace("Welcome", "Hi"); 

Update

Спасибо всем за такой быстрый ответ и большие ответы. Ответы от gdoron и mblase75 отлично работали. Для простоты mblase75, казалось, был упрощенным, но gdoron изо всех сил старался объяснить линию за строкой. Еще раз спасибо!

+0

ли обертывание «Добро пожаловать» в проблему «span»? – mreq

+0

См. Также аналогичный вопрос [jQuery выбор текста из div с: нет] (http://stackoverflow.com/questions/9739609/jquery-selecting-text-from-a-div-with-not/9739675). – Blazemonger

+0

http: // jsfiddle.net/KaAAZ/1/именно для ваших нужд. –

ответ

1

Один из подходов будет использовать функцию обратного вызова для .html:

$('#div1').html(function(i,old) { 
    return old.replace('Welcome','hi'); 
}); 

http://jsfiddle.net/VsAZu/

+0

Я поддержу вас (хотя это вообще-то ** отличный ** ответ!), Чтобы вернуть анонимный нисходящий противник! – gdoron

0

Это не элегантное, но не могли бы вы просто сделать:

$("#div1").html('Hi <button id="clicker">Click Me</button>'); 

Или представьте, что вы могли бы структурировать разметку так, чтобы «Добро пожаловать» часть была пролет обернутой вокруг него, как так:

<span id="welcome">Welcome</span><button id="clicker">Click Me</button> 

И направьте его таким образом.

+0

Вы просто не ответили на вопрос! – gdoron

+0

упаковка «добро пожаловать» в пролете не будет работать? –

+0

Первый вариант не имеет значения. и второй вариант предлагает только альтернативу. – gdoron

1

Вы можете сделать это следующим образом:

var el = $('#div1'); 
el.html(el.html().replace('Welcome', 'Hi')); 

Но это немного полная, да? Лучше делать вещи, которые нужно изменить, иметь свой собственный элемент DOM.

<div id='div1'> 
    <span class='welcome_text'>Welcome</span> 
    <button id='clicker'>Click Me</button> 
</div> 

$('#div1 span.welcome_text').text('Hi'); 
+0

Я искренне надеюсь, что это не вы, кто отдал все остальные хорошие и рабочие ответы. Извините, но вы единственный, у кого не было никого ... – gdoron

+0

Я никого не убивал ... – rfunduk

+0

Прошу прощения за то, что я вас подозревал. эти таинственные нисходящие голоса без комментариев, я их ненавижу! – gdoron

2
$('#div1').contents().filter(function() { 
    return this.nodeType == 3 && 
      this.data == "Welcome"; // Or this.data.indexof("Welcome") != -1 
}).each(function(){ 
     this.data = "HI"; 
    }); 

Что она делает? Давайте поэтапно:

  1. $('#div1').contents() выбрать все содержимое div1 дел.
  2. .filter(function() { return this.nodeType == 3 && this.data == "Welcome"; фильтровать его двумя параметрами: «textnode-3» - это «Добро пожаловать».
  3. .each(function(){ this.data = "HI"; }); Изменить каждый Добро пожаловать на "HI"

LIVE DEMO

+0

** @ Downvoter !!! пожалуйста, оставьте комментарий !!! ** – gdoron

+1

он на веселье. – Blazemonger

+0

@ gdoron или mblase + 1 от моего конца! который должен компенсировать, lol для моего, у меня был js скрипка, но ни один код не проголосовал дважды чертовски :) (удалил мой пост сейчас) ouch, не знаю почему; хотя решение было ** правильным **. Кстати какая идея, почему я был проголосован? для меня, чтобы понять? ура –

Смежные вопросы