Вызов определяемой пользователем функции javascript для элемента jQuery

0

Я пытался вызвать определенную пользователем функцию 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. Любая помощь будет оценена по достоинству. Заранее спасибо.

  • 1
    Что происходит, когда вы отлаживаете это? Есть ли ошибки на консоли? Код jQuery работает вообще? Условие if выполнено? Селекторы находят элементы, которые вы ожидаете найти? Ваша функция вызывается? Пройдите через это в отладчике, вы сможете найти полезную информацию, которая поможет нам помочь вам.
  • 2
    вы передаете ссылку на объект this для nl2br но аргумент выглядит , как это требуется строка (содержание вы пытаетесь повлиять). IOW кажется, что, возможно, вы хотите что-то более похожее на это nl2br($(this).html());
Показать ещё 8 комментариев
Теги:

2 ответа

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()));
    }
});

edit: исправлено неправильное использование .contains

http://jsfiddle.net/s8eNh/

  • 0
    Я попробовал ваше предложение как напечатанное, но оно не сработало. Я обновил свой код, чтобы отразить полную структуру его использования, чтобы обеспечить лучшее пояснение.
  • 0
    Вы можете console.log несколько строк console.log чтобы увидеть, в чем дело; console.log($(this)); например, чтобы посмотреть, правильно ли он ударил по всем элементам .mediaDesc. Я бы, вероятно, зарегистрировал выходные .contains() вызовов .contains() и посмотрел, возвращают ли они ожидаемые значения.
Показать ещё 5 комментариев
0

.contains предназначен для поиска текста внутри узла. Вы хотите:

$('.mediaDesc').not(':has(p, div, span)').each(nl2br)

если вам нужно обработать узел и только вызвать nl2br с text или html то выполните:

$('.mediaDesc').not(':has(p, div, span)').each(function(){
    nl2br( $(this).html() )
})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню