【问题标题】:Removing a class from value in an <input> tag从 <input> 标记中的值中删除一个类
【发布时间】:2016-06-24 06:26:54
【问题描述】:

我有一个 &lt;input&gt; 标记,其中包含一些 HTML 作为值。我想删除任何具有“强调”类的&lt;span&gt;s,但仍保留&lt;span&gt; 中的内容。我也不想删除任何其他&lt;span&gt;s。

以下示例:

这个:

<input type="hidden" name="answer" id="answer" value="<span class="emphasis"><div class="fraction_display"><span class="numer_display">21</span><span class="bar_display">/</span><span style="border-top-color: green;" class="denom_display">23</span></div></span>"

最终应该是:

<input type="hidden" name="answer" id="answer" value="<div class="fraction_display"><span class="numer_display">21</span><span class="bar_display">/</span><span style="border-top-color: green;" class="denom_display">23</span></div>"`

我已经尝试在这个小提琴中使用 jQuery (https://jsfiddle.net/0xgx04pq/4/)...

function remove_emphasis_class (){
  var content = $('#answer').val(answer);
  var content_after = content.filter('span.emphasis').contents().unwrap();
  $('#answer').val(content_after);
  alert(content_after);
}
.emphasis {
  background: orange;
  font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="hidden" value="2 + 5 = <span class='emphasis'>7</span>" name="answer" id="answer">
<br><br>
<button onclick="remove_emphasis_class();">Remove Class</button>

...但它不起作用。 content_after 最终返回为“[object Object]”有什么想法吗?

【问题讨论】:

  • 最好将其转换为 html、查询、删除并设置输入值。他们是这样写的,你的 html 不会呈现..
  • 那是无效的 HTML,class 的开头引号关闭了 value 属性的值,剩下的内容将被解析为一团糟……
  • @epascarello:您能指导一下如何将其转换为 HTML 并进行查询吗?
  • 您首先需要解决这个问题:&lt;input type="hidden" value="2 + 5 = &lt;span class='emphasis'&gt;7&lt;/span&gt;" name="answer" id="answer"&gt; -- 您将 HTML 放入您的 &lt;input&gt;value 属性中?
  • 这应该做什么? jsfiddle.net/0xgx04pq/3

标签: javascript jquery html


【解决方案1】:

基本思路

//using string instead of reading value of the input aka var str = $(".foo").val();
var str = "2 + 5 = <span class='emphasis'>7</span>";
//convert the string to html
var temp = $("<div>").html(str);
//find the span and unwrap it
temp.find(".emphasis").contents().unwrap();
//get the html string without the span
var updated = temp.html();
//display it
console.log(updated);
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"&gt;&lt;/script&gt;

另一种选择是只读取 .text() 而不是 .html() 它将删除所有 html。

【讨论】:

    【解决方案2】:

    输入值中可能存在多个具有emphasis类的span元素的一种方法可以是这样的;

    var tempDir = document.createElement("div"),
            inp = document.getElementById("answer"),
        els2del,
        content = "";
    tempDir.innerHTML = inp.value;
    els2del = tempDir.querySelectorAll("span[class = 'emphasis']");
    for (var i = 0; i < els2del.length; i++){
      content += els2del[i].innerHTML;
    }
    inp.value = content;
    console.log(inp.value);
    &lt;input type="hidden" name="answer" id="answer" value="&lt;span class='emphasis'&gt;&lt;div class='fraction_display'&gt;&lt;span class='numer_display'&gt;21&lt;/span&gt;&lt;span class='bar_display'&gt;/&lt;/span&gt;&lt;span style='border-top-color: green;' class='denom_display'&gt;23&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;"&gt;

    【讨论】:

      【解决方案3】:

      试试看:

      function remove_emphasis_class (){
              var answer = document.querySelector('#answer').value;
          var div = document.createElement("div");
          div.innerHTML = answer;
              var selector = div.querySelector('.emphasis');
          var newContent = selector.innerHTML;
          div.querySelector('.emphasis').outerHTML = newContent;
          console.log(div.innerHTML);
      }
      

      【讨论】:

      • 这真的很接近!理想情况下,我不想有空的 &lt;span&gt;&lt;/span&gt; 部分。我已经用你的函数更新了我的小提琴 (jsfiddle.net/0xgx04pq/5) 我们如何删除空跨度?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-24
      • 2012-11-21
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多