Tôi đang gặp khó khăn khi gói đầu quanh những gì nên là một giải pháp đơn giản. Tôi muốn thay thế văn bản trong một thẻ nhãn, mà không ảnh hưởng đến các 'anh chị em' khác, nếu chúng tồn tại.jQuery thay thế văn bản để lại anh chị em còn nguyên vẹn
đánh dấu mẫu:
<fieldset class="myFieldsetClass">
<legend>Sample Fieldset</legend>
<ol>
<li>
<label>
<span class="marker">*</span>
Some Label 1
</label>
</li>
<li>
<label>
Some Label 2
</label>
</li>
<li>
<label>
Text that doesn't match...
</label>
</li>
</ol>
</fieldset>
Mục tiêu:
- Để thay thế văn bản
Some Label X
vớiSome Label
(Tức là loại bỏX
từ các văn bản nhãn). - thẻ span trong nhãn phải giữ nguyên vẹn nếu chúng tồn tại, chẳng hạn như
<span class="marker">
ở trên. - Tôi không biết giá trị của
X
, có thể dài từ 1 ký tự trở lên.
Script hiện tại:
kịch bản jQuery My bên dưới công trình, nhưng tôi biết là rất không hiệu quả. Tôi dường như không thể quấn quanh đầu tôi cái này vì một lý do ...
//for each label in the fieldset that contains text "Some Label "
$(".myFieldsetClass label:contains('Some Label ')").each(function() {
if ($(this).has("span").length > 0) {
//if the label has the span tag within, remove it and prepend it back to the replaced text
$(this).find("span").remove().prependTo($(this).text(labelText));
}
else {
//otherwise just replace the text
$(this).text('Some Label');
}
});
tôi nghĩ lúc đầu tôi chỉ có thể làm:
$(".myFieldsetClass label:contains('Some Label ')").text("Some Label");
Nhưng điều này sẽ xóa tất cả nội dung của nhãn và do đó loại bỏ khoảng thời gian mà tôi không muốn. Tôi không thể sử dụng bất kỳ chức năng thay thế nào để thay thế Some Label X
bằng Some Label
vì tôi không biết X
sẽ là gì.
Có ai có thể đề xuất cách tiếp cận trang nhã/hiệu quả hơn cho vấn đề này không?
Cảm ơn.
EDIT
Sau khi thử nhiều câu trả lời, tôi nghĩ rằng vấn đề có vẻ là rằng ngay cả nếu tôi chọn bộ sưu tập đúng, họ là các nút văn bản, mà jquery dường như không muốn thay đổi .. Tôi đã sử dụng FireBug để chọn bộ sưu tập (nhiều câu trả lời dưới đây đều chọn đúng nhưng theo những cách hơi khác nhau). Trong bảng điều khiển firebug kết quả thiết lập là:
[<TextNode textContent="Some Label 1:">,
<TextNode textContent="Some Label 2:">,
<TextNode textContent="Some Label 3:">,
<TextNode textContent="Some Label 4:">,
<TextNode textContent="Some Label 5:">]
Vấn đề dường như là gọi .replaceWith(), .replace(), .text(), vv dường như không ảnh hưởng đến các bộ sưu tập jquery. Nếu tôi cho phép các bộ sưu tập trên để chứa một trong những nhịp, sau đó gọi .replaceWith(), .replace(), vv chức năng một cách chính xác so với khoảng thời gian, nhưng các nút văn bản ở lại như là ..
sẽ 'x' bao giờ được bao bọc trong thẻ của riêng mình, hoặc sẽ nó luôn luôn được văn bản đơn giản? –
Allways plain text, không bao giờ nằm trong một thẻ khác. –