2010-09-07 4 views
3

Как я могу выбрать слово и изменить цвет этого слова?Как изменить цвет слова в jquery

например. добавьте прослойку со стилем и измените цвет шрифта.

Может ли кто-нибудь привести меня по правильному пути, пожалуйста.

Jquery

function edit_addon (div_id) {  
    $("#"+div_id).attr ('contentEditable', true) 
      .css ('color','#F00') 
      .css ('cursor','Text') 
      ; 

} 

HTML

<div id="34" ondblclick="javascript:edit_addon(34)">Editable Text</div> 

Спасибо,

+0

атрибуты id не могут начинаться с числа в HTML и ваш код не будет проверяться. Они должны начинаться с [A-Za-z] - http://www.w3.org/TR/REC-html40/types.html#type-name –

ответ

6

Самый простой способ будет динамически добавлять пролеты с индивидом в DIV и просто изменить цвет текущего диапазона. Вот основная идея:

$(".Editable").dblclick(function() { 
    var words = $(this).text().split(" "); 
    var result = ""; 
    for (var i=0; i<words.length; i++) { 
     result.append("<span class='word'>" + words[i] + "</span>"); 
    } 
    $(this).innerHTML = result; 
} 

#CSS 

span.word:hover { color: #0f0; } 
+2

Возможно, вам следует избегать 'in ... in' на массивах. 'for ... in' предназначен для перебора свойств объекта, поэтому, если прототип массива был изменен, имена свойств будут включены в результат. –

+0

@ Энди Е, спасибо, я слишком много перепутаю между языками. Редактировал :) –

1

Это должно работать для вас. В общем, намного проще дать вашим элементам класс, а затем в функции ready(здесь кратко). вы можете настроить любые динамические аспекты страницы.

<style type="text/css"> 
    .Word { color:#F00;cursor:text;padding:20px; } 
</style> 
<script type="text/javascript"> 
    $(function() { 
     $("div.Editable").each(function() { 
      var elem = $(this), 
       text = elem.text(), 
       words = text.split(" "), 
       innerHtml = "<span>" + words.join("</span>&nbsp;<span>") + "</span>"; 
      elem.html(innerHtml); 
     }); 
     $("div.Editable span").live("dblclick", function (evt) { 
      $(this) 
      .attr({ contentEditable: true }) 
      .addClass("Word"); 
     }).live("mouseout", function() { 
      var elem = $(this); 

      elem 
      .attr({ contentEditable: false }) 
      .removeClass("Word"); 

      var text = elem.text(), 
       words = text.split(" "), 
       innerHtml = "<span>" + words.join("</span>&nbsp;<span>") + "</span>"; 

      elem.replaceWith($(innerHtml)); 
     }); 
    }); 
</script> 

<div id="Editable34" class="Editable"> 
    Editable Editable Editable 
</div> 
+0

Единственная проблема с этим - когда в одном ' div', все это станет редактируемым. –

+1

@SimpleCoder - Мое понимание чтения не позволяет мне снова, позвольте мне исправить это. – ChaosPandion

+0

@SimpleCoder - Я не на 100% доволен этим, но я не могу делать работу OPs теперь? – ChaosPandion

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