【问题标题】:Find and replace HTML using jQuery使用 jQuery 查找和替换 HTML
【发布时间】:2015-08-26 22:52:01
【问题描述】:

您好,我正在寻找页面中包含的 HTML 并使用 jQuery 替换它。

我已经花了几个小时在这里查看类似的问题,但我找不到任何可以完全实现我正在寻找的问题。

我的页面上有以下 HTML

<div id="mCSB_1_container" class="mCSB_container" dir="ltr" style="position:relative; top:0; left:0;">
<label class="">
<input type="checkbox" value="blazers">
<span>
Blazers & Waistcoats
<span class="prdctfltr_count">6/8</span>
</span>
</label>
<label class="">
<input type="checkbox" value="coatsjackets">
<span>
Coats & Jackets
<span class="prdctfltr_count">1/3</span>
</span>
</label>
  </div>

而且我需要一种方式说找到下面的代码

<label class="">
<input type="checkbox"

替换成

&lt;option class=""

到目前为止,我查看的所有其他问题似乎都替换了丢失我需要保留的 value="" 属性的整个标签。

任何帮助将不胜感激。

编辑: 我需要按照下面的代码行结束,但我一步一步地进行

<div id="mCSB_1_container" class="mCSB_container" dir="ltr" style="position: relative; top: 0px; left: 0px;">
<select>
<option class="" value="blazers">
Blazers & Waistcoats
</option>
<option class="" value="coatsjackets">
Coats & Jackets
</option>
</select>
</div>

【问题讨论】:

  • 应该替换整个标签。即替换现有项目,但您应该复制要为每个元素保留的任何属性。
  • 所以你想用你当前的html创建一个&lt;select&gt;
  • @Stryner 是的,这是最终目标,我已将最终需要实现的代码结构添加到原始问题中。
  • 查找 span 并将其输入附加到选择框
  • @TrueBlueAussie 我确实认为它最终可能会变成那样。我遇到的问题是我无法弄清楚如何为每个元素复制现有属性。到目前为止,我遇到的每个问题似乎都只是替换了没有任何属性的整个标签。

标签: javascript jquery html replace


【解决方案1】:

你应该可以这样做:

var $select = $('<select>');
$('#mCSB_1_container').append($select);
$('#mCSB_1_container label').each(function () {
    var $label = $(this);
    var $input = $label.find('input');
    var value = $input.val();
    var text = $label.text();
    $('<option>').val(value).text(text).appendTo($select);
    $label.remove();
});

JSFiddle: http://jsfiddle.net/TrueBlueAussie/yekxrca5/3/

这个解释有点啰嗦,显然可以缩短。

最终结果如下所示(重新格式化为空白未删除):

<div id="mCSB_1_container" class="mCSB_container" dir="ltr" style="position:relative; top:0; left:0;">
   <select>
       <option value="blazers">Blazers &amp; Waistcoats 6/8</option>
       <option value="coatsjackets">Coats &amp; Jackets 1/3</option>
   </select>
</div>
  • 您当然可以先从文本中删除所有空白。
  • 您可能还希望将name="" 属性添加到选择中,以便将选定的值发送回服务器。

JSFiddle: http://jsfiddle.net/TrueBlueAussie/yekxrca5/4/

如果您确实想保留标签中的类,请使用:

$('<option>').val(value).attr("class", $label.attr('class')).text($.trim(text)).appendTo($select);

JSFiddle: http://jsfiddle.net/TrueBlueAussie/yekxrca5/5/

更新:

如果你想保留当前的复选框控件,不要remove()它们,只需hide()它们(它们仅用于演示)并在选择更改时更新它们:

// update the checkboxes to match the selection
$select.change(function(){
    var selection = $(this).val();
    // Now find the matching checkbox by value and change selection
    var $cb = $(':checkbox[value="'+selection+'"]').prop('checked', true);
    $(':checkbox').not($cb).prop('checked', false);
}).change();

JSFiddle: http://jsfiddle.net/yekxrca5/8/

最后的change() 只是在加载时触发更改事件,因此当前选择被勾选。

【讨论】:

  • 并且 OP 希望保留属性名称(和值),在这种情况下为“类”,所以这可能会有所帮助:stackoverflow.com/questions/2048720/… 不确定 JQuery 是否可以处理它......
  • @nevermind:空的class 毫无意义,但我会进一步调查目标是什么。干杯:)
  • 是的,你是对的......而且,无论如何,'class' 在'option'标签上毫无意义......但是,我认为'class'只是例子,OP想要得到任何属性(可以是类、alt、标题……随便……那个“动态”属性有问题),但是,显然,这只是编辑错误。干杯! :)
  • @TrueBlueAussie 非常感谢你,它就像我想要的那样出来。空白类只是因为我希望保留与以前类似的结构。但目前不需要。感谢您超出我的预期。
  • @TrueBlueAussie 唯一的问题是,当您实际选择一个值时,它不会加载任何内容。正如您提到的,我需要将选定的值传递给服务器。这可能是一个问题,但无论如何基于使用复选框的原始结构来执行此操作?我想保留原始复选框的相同功能,但如果有意义的话,只需在选择下拉框中设置样式。
猜你喜欢
  • 2016-04-14
  • 1970-01-01
  • 2012-09-22
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2021-06-01
  • 2016-03-04
相关资源
最近更新 更多