如何通过javascript添加<span>?</span>

时间:2011-07-14 06:56:52

标签: javascript html

  

可能重复:
  How to use the Javascript to add/remove the CSS/colour style to the html page?

我对HTML和javascript有疑问。我得到了以下的paragrahe。

function add_span(){
     // ??
}

<input type="button" onclick="add_span()" value="add span"/>
<p> statement1, statement2, statement3 </p>

用户

后是否可以获得以下结果?
  1. 用鼠标选择突出显示的文字
  2. 点击按钮
  3. e.g。

    1. 突出显示'statement1',
    2. 点击按钮
    3. 预期结果:

      <input tupe="button" onclick="add_span()" value"add span"/>
      <p> <span class="ABC">statement1,</span> statement2, statement3 </p>
      
      #####更新了代码,但没有工作
      // updated code in the add_span
      
          var selectedText;
      
          if (window.getSelection)
          {
              selectedText = window.getSelection();
          }
          else if (document.getSelection) // FireFox
          {
              selectedText = document.getSelection();
          }
          else if (document.selection)  // IE 6/7
          {
              selectedText = document.selection.createRange().text;
          }
      
          //create the DOM object
          var newSpan = document.createElement('span');
          // add the class to the 'spam'
          newSpan.setAttribute('class', 'ABC');
          document.getElementById('text').appendChild(newSpan);   
          var selectedTextNode = document.createTextNode(); 
          newSpan.appendChild(selectedTextNode);
      

3 个答案:

答案 0 :(得分:4)

您可以从@Pezhvak IMV的答案中获取选定的文字:

var selectedText;
if (window.getSelection)
{
    selectedText = window.getSelection();
}
else if (document.getSelection) // FireFox
{
    selectedText = document.getSelection();
}
else if (document.selection)  // IE 6/7
{
    selectedText = document.selection.createRange().text;
}

要添加元素,您必须创建DOM节点,设置其属性并添加元素:

  1. 创建DOM节点:

    var newSpan = document.createElement('span');

  2. 设置班级

    newSpan.setAttribute('class','ABC');

  3. 将范围添加到<p>下方(<p>应该有ID或某种识别机制:

  4. <span>添加到<p>

    的document.getElementById( '文本')的appendChild(newSpan)。

  5. 并设置文字

    newSpan.innerHTML = selectedText;

  6. 您也可以使用createTextNode(步骤5的替代方案)

    var selectedTextNode = document.createTextNode(); 
    newSpan.appendChild(selectedTextNode);
    

答案 1 :(得分:2)

回答部分问题:

function getSelText() {
    var txt = '';
     if (window.getSelection)
    {
        txt = window.getSelection();
             }
    else if (document.getSelection) // FireFox
    {
        txt = document.getSelection();
            }
    else if (document.selection)  // IE 6/7
    {
        txt = document.selection.createRange().text;
            }
    else return; document.aform.selectedtext.value =  txt; }

答案 2 :(得分:0)

[编辑]使用surroundContents

替换了该功能

这是一个能够完成你所问的[我认为]的功能。在this jsfiddle中查看。

function surroundSelection() {
    var element = document.createElement('span');
    element.className = "ABC";
    var sel = window.getSelection() ||
              document.getSelection() ||
             (document.selection ? document.selection.createRange() : null);
    if (sel.rangeCount) {
            var range = sel.getRangeAt(0).cloneRange();
            range.surroundContents(element);
            sel.removeAllRanges();
            sel.addRange(range);
            sel.removeAllRanges();
    }
}

对于IE&lt; 9,您必须搜索获取选择的方法,例如here