Я пытался вызвать определенную пользователем функцию JavaScript в элементе jQuery, и хотя я видел здесь несколько тем, у меня все еще есть немного проблем с применением их логик к моей ситуации. Вот что я пробовал до сих пор:
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>
Моя цель - динамически найти div с классом mediaDesc, чтобы узнать, содержит ли их внутренний контент html-теги, такие как p, span или div. Если нет, то примените к нему функцию JavaScript nl2br. Любая помощь будет оценена по достоинству. Заранее спасибо.
Основываясь на текущей доступной информации, я считаю, что вам нужно что-то вроде этого:
$(".mediaDesc").each(function () {
if ($(this).find("p").length == 0 || $(this).find("div").length == 0 || $(this).find("span").length == 0)
{
$(this).html(nl2br($(this).html()));
}
});
edit: исправлено неправильное использование .contains
console.log
несколько строк console.log
чтобы увидеть, в чем дело; console.log($(this));
например, чтобы посмотреть, правильно ли он ударил по всем элементам .mediaDesc. Я бы, вероятно, зарегистрировал выходные .contains()
вызовов .contains()
и посмотрел, возвращают ли они ожидаемые значения.
.contains
предназначен для поиска текста внутри узла. Вы хотите:
$('.mediaDesc').not(':has(p, div, span)').each(nl2br)
если вам нужно обработать узел и только вызвать nl2br с text
или html
то выполните:
$('.mediaDesc').not(':has(p, div, span)').each(function(){
nl2br( $(this).html() )
})
if
выполнено? Селекторы находят элементы, которые вы ожидаете найти? Ваша функция вызывается? Пройдите через это в отладчике, вы сможете найти полезную информацию, которая поможет нам помочь вам.this
дляnl2br
но аргумент выглядит , как это требуется строка (содержание вы пытаетесь повлиять). IOW кажется, что, возможно, вы хотите что-то более похожее на этоnl2br($(this).html());