如何 select HTML 中没有标签的文本
How to select a text in HTML without a tag
我目前正在使用 Wordpress 插件制作捐赠表格,但我完全被一个问题困住了。
该插件会自动在价格选项中添加一些我不想要的单词和字符。
我希望选项为“5 欧元”“10 欧元”“15 欧元”"Own option"。
当前选项的 HTML 如下所示:
<li>
<label>
<input type="radio" onchange="mollie_forms_recurring_methods_624();mollie_forms_624_totals();" data-frequency="months" data-freq="iedere maanden" data-pricetype="fixed" data-price="10.00" data-vat="" name="rfmp_priceoptions_624" value="1">
/ (€ 10,00 iedere maanden)
</label>
</li>
如您所见,它在价格之外添加了 "iedere maanden" 和“( )”之类的词。我已经找到了删除或替换这些词的 javascript 代码,但它也删除了标签内的收音机输入,需要保留该输入才能使捐赠表格正常工作。
我用来替换单词的Jquery代码,还删除了输入:
$('.donate-box ul li label:not(input)').text(function(i,t){
return t.replace("iedere maanden", " ");
});
我真的不能编辑插件的HTML,因为当插件更新时它会被重置。
如何在没有 deleting/editing 输入字段的情况下只 select 标签内的文本/单词?
提前致谢!
您可以更具体地说明要替换的字符串以避免与单选项中的内容混淆
用替换("iedere maanden)", " ")
您遇到的问题是您需要修改节点,而不是元素对象的文本内容。
要实现这一点,您需要遍历每个 label
并获取其 contents()
。鉴于您的 HTML 结构,您可以获取内容中的最后一个节点并使用正则表达式删除与您要显示的价格无关的任何字符。试试这个:
$('li label').each(function() {
var node = $(this).contents().last()[0];
node.textContent = node.textContent.replace(/[^€\d\,]/g, '');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>
<label>
<input type="radio" onchange="mollie_forms_recurring_methods_624();mollie_forms_624_totals();" data-frequency="months" data-freq="iedere maanden" data-pricetype="fixed" data-price="10.00" data-vat="" name="rfmp_priceoptions_624" value="1">
/ (€ 5,00 iedere maanden)
</label>
</li>
<li>
<label>
<input type="radio" onchange="mollie_forms_recurring_methods_624();mollie_forms_624_totals();" data-frequency="months" data-freq="iedere maanden" data-pricetype="fixed" data-price="10.00" data-vat="" name="rfmp_priceoptions_624" value="1">
/ (€ 10,00 iedere maanden)
</label>
</li>
<li>
<label>
<input type="radio" onchange="mollie_forms_recurring_methods_624();mollie_forms_624_totals();" data-frequency="months" data-freq="iedere maanden" data-pricetype="fixed" data-price="10.00" data-vat="" name="rfmp_priceoptions_624" value="1">
/ (€ 250,00 iedere maanden)
</label>
</li>
</ul>
我目前正在使用 Wordpress 插件制作捐赠表格,但我完全被一个问题困住了。 该插件会自动在价格选项中添加一些我不想要的单词和字符。
我希望选项为“5 欧元”“10 欧元”“15 欧元”"Own option"。
当前选项的 HTML 如下所示:
<li>
<label>
<input type="radio" onchange="mollie_forms_recurring_methods_624();mollie_forms_624_totals();" data-frequency="months" data-freq="iedere maanden" data-pricetype="fixed" data-price="10.00" data-vat="" name="rfmp_priceoptions_624" value="1">
/ (€ 10,00 iedere maanden)
</label>
</li>
如您所见,它在价格之外添加了 "iedere maanden" 和“( )”之类的词。我已经找到了删除或替换这些词的 javascript 代码,但它也删除了标签内的收音机输入,需要保留该输入才能使捐赠表格正常工作。
我用来替换单词的Jquery代码,还删除了输入:
$('.donate-box ul li label:not(input)').text(function(i,t){
return t.replace("iedere maanden", " ");
});
我真的不能编辑插件的HTML,因为当插件更新时它会被重置。
如何在没有 deleting/editing 输入字段的情况下只 select 标签内的文本/单词?
提前致谢!
您可以更具体地说明要替换的字符串以避免与单选项中的内容混淆 用替换("iedere maanden)", " ")
您遇到的问题是您需要修改节点,而不是元素对象的文本内容。
要实现这一点,您需要遍历每个 label
并获取其 contents()
。鉴于您的 HTML 结构,您可以获取内容中的最后一个节点并使用正则表达式删除与您要显示的价格无关的任何字符。试试这个:
$('li label').each(function() {
var node = $(this).contents().last()[0];
node.textContent = node.textContent.replace(/[^€\d\,]/g, '');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>
<label>
<input type="radio" onchange="mollie_forms_recurring_methods_624();mollie_forms_624_totals();" data-frequency="months" data-freq="iedere maanden" data-pricetype="fixed" data-price="10.00" data-vat="" name="rfmp_priceoptions_624" value="1">
/ (€ 5,00 iedere maanden)
</label>
</li>
<li>
<label>
<input type="radio" onchange="mollie_forms_recurring_methods_624();mollie_forms_624_totals();" data-frequency="months" data-freq="iedere maanden" data-pricetype="fixed" data-price="10.00" data-vat="" name="rfmp_priceoptions_624" value="1">
/ (€ 10,00 iedere maanden)
</label>
</li>
<li>
<label>
<input type="radio" onchange="mollie_forms_recurring_methods_624();mollie_forms_624_totals();" data-frequency="months" data-freq="iedere maanden" data-pricetype="fixed" data-price="10.00" data-vat="" name="rfmp_priceoptions_624" value="1">
/ (€ 250,00 iedere maanden)
</label>
</li>
</ul>