我一直在尝试在jQuery元素上调用用户定义的JavaScript函数,虽然我已经在这里看到了几个关于它的主题,但我仍然在将逻辑应用于我的情况时遇到了一些麻烦。 这是我到目前为止所尝试的内容:
Javscript& jQuery的:
$(document).ready(function() {
// JavaScript function
nl2br = function (str, is_xhtml) {
var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br ' + '/>' : '<br>';
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}
// jQuery Call
if ( ! $('.mediaDesc:contains("p")').length || ! $('.mediaDesc:contains("div")').length || ! $('.mediaDesc:contains("span")').length ) {
nl2br(this);
}
}); //end document ready
HTML:
<div class="mediaDesc">
Hello World!
I am text on a new line soon to have a br tag before me!
</div>
我的目标是使用 mediaDesc 类动态查找div,以查看其内部内容是否包含html标记,例如p,span或div。如果没有,则将nl2br JavaScript函数应用于它。 任何帮助,将不胜感激。 提前谢谢。
答案 0 :(得分:1)
根据目前的可用信息,我相信你想要这样的东西:
$(".mediaDesc").each(function () {
if ($(this).find("p").length == 0 || $(this).find("div").length == 0 || $(this).find("span").length == 0)
{
$(this).html(nl2br($(this).html()));
}
});
编辑:修复了对.contains
答案 1 :(得分:0)
.contains
用于搜索节点内的文本。你想要的是:
$('.mediaDesc').not(':has(p, div, span)').each(nl2br)
如果您需要处理节点并且仅使用text
或html
调用nl2br,请执行以下操作:
$('.mediaDesc').not(':has(p, div, span)').each(function(){
nl2br( $(this).html() )
})