取消选择DOM元素
Unselect DOM element
我这里有一个jquery:
$(document).ready(function () {
$(".story-area > h1, .story-area > p, .story-area > div > p").text(function () {
return convertString($(this).text());
});
});
和一个函数:
function convertString(current_text) {
var arr_text = current_text.split(' ');
var new_text = '';
for (i = 0; i < arr_text.length; i++) {
if (arr_text[i].length > 4) {
new_text += arr_text[i].replace(/[Hh][Ii]/g, 'HIV') + ' ';
} else {
new_text += arr_text[i] + ' ';
}
}
return new_text;
}
我的问题是,.story-area > div > p
下的任何标签被删除时,文本被替换,我不希望这种情况发生。知道怎么做吗?如果我使用:not()
选择器,转换字符串将不会被触发。
任何想法吗?
假设你想保留标签,只是替换文本,你可以过滤到文本节点,并使用jQuery的replaceWith
来转换节点的内容。
function transform() {
$('.story-area > div > p').contents().filter(function() {
return this.nodeType === Node.TEXT_NODE;
}).replaceWith(function () {
return $(this).text().replace('node', 'REPLACEMENT TEXT');
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="story-area">
<div>
<p>
Text node in .story-area > div > p
<strong>Text in a strong tag that shouldn't be touched</strong>
</p>
</div>
</div>
<button onclick="transform()">Transform</button>
我认为问题是您正在重新设置替换所有内容的整个文本,包括所选对象中的元素。唯一需要改变的是使用每个代替文本。
$(document).ready(function () {
$(".story-area > h1, .story-area > p, .story-area > div > p").each(function(index) {
$( this ).text(convertString($(this).text()));
});
});
convertString()函数保持不变。
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- 通过AJAX侦听向DOM添加某些元素
- 如何在使用Ractive.extend()时引用DOM元素
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- Selenium无法在浏览器DOM中定位元素
- 如何'剪切'DOM元素并将其显示在其他位置
- 转换<a>使用jQuery将文本字符串转换为dom元素
- 从dom中删除任何元素后,Touchmove事件停止触发
- d3在数据更新时错误地附加了dom元素
- 访问VueJS中的DOM元素
- 在Meteor中如何查找DOM元素(渲染后)
- 找到元素DOM的根节点(阴影或光)的最佳方法是什么?
- 在querySelector:如何获得第一个和最后一个元素?dom中使用的遍历顺序