2015-01-19 3 views
0

Привет, я пытаюсь в течение нескольких часов удалить текстовую строку еще раз после добавления ее.jquery text(). Replace ('', '') не работает

У меня есть скрипт, который обрабатывает аккордеон, и у меня есть избыточность в тексте. Поэтому я хочу добавить и удалить избыточный текст при открытии или закрытии строки аккордеона.

Вот мой код:.

var redundantText = "text text text <a href=\"#contact\">Contact Me</a> text text text"; 

$('#collapse_1').on('show.bs.collapse', function() { 
    $(".dropdown_collapse_1").addClass("dropdown-indicator"); 
    $(".dropdown_collapse_1").removeClass("dropdown-collapsed"); 
    $("#redundant_text_wrapper").append(redundantText); 
}); 
$('#collapse_1').on('hide.bs.collapse', function() { 
    $(".dropdown_collapse_1").addClass("dropdown-collapsed"); 
    $(".dropdown_collapse_1").removeClass("dropdown-indicator"); 
    $("#redundant_text_wrapper").text().replace(redundantText, ''); 
}); 

Дописывать работает нормально, но текст() заменить() не делает. Поэтому, если я несколько раз открываю и закрываю ряд аккордеона, он всегда добавляет redundantText, но никогда не удаляет его, так что redundantText становится еще более избыточным.

Редактировать: изменить 'redundantText' на redundantText. Тем не менее не работает

edit2:

$("#redundant_text_wrapper").text($("#redundant_text_wrapper").text().replace(redundantText,'')); 

также не помогает, он удаляет только ссылку, но текст остается

EDIT3:

$("#redundant_text_wrapper").text(function(index, currentText) { 
    return currentText.replace(redundantText,''); 
}); 

также делает только удалить ссылку , текст остается

+4

изменить '$ (" #redundant_text_wrapper "). Text(). Replace ('redundantText', ''); 'to:' $ ("#redundant_text_wrapper"). text(). replace (redundantText, ''); ' – SuperDJ

+0

@SuperDJ Положите это как ответ. :) –

+0

@BhojendraNepal Изменение использует переменную, содержащую текст. Текущий способ заключается в поиске 'redundantText' в тексте(), которого не существует. –

ответ

0

Хорошо, я попробовал другой подход в настоящее время :

var redundantText = "<span id=\"redundantText_wrapper\"> text text text <a href=\"#contact\">Contact Me</a> text text text</span>"; 

$('#collapse_1').on('show.bs.collapse', function() { 
    $(".dropdown_collapse_1").addClass("dropdown-indicator"); 
    $(".dropdown_collapse_1").removeClass("dropdown-collapsed"); 
    $("#redundant_text_wrapper").after(redundantText); 
}); 
$('#collapse_1').on('hide.bs.collapse', function() { 
    $(".dropdown_collapse_1").addClass("dropdown-collapsed"); 
    $(".dropdown_collapse_1").removeClass("dropdown-indicator"); 
    $('#redundantText_wrapper').remove(); 
}); 

Так что в основном я использую 'after' вместо 'append' и помещаю текст в span с идентификатором. Теперь я могу использовать $ ('# ID'). Remove(); чтобы избавиться от нее при закрытии вкладки.

+0

Это нормально, за исключением того, что теперь у вас есть временные дубликаты идентификаторов в вашем html, который является недопустимым – Rhumborl

+0

Хм, я не вижу, какой идентификатор будет дублироваться. Когда я открою следующую вкладку, закрывается.Так что функция hide.bs.collapse запускает и удаляет #redundantText_wrapper из другой вкладки. И для всех других вкладок есть ID, например # collapse_2, # collapse_3 –

0

Изменение

$("#redundant_text_wrapper").text().replace('redundantText',''); 

To:

$("#redundant_text_wrapper").text().replace(redundantText,''); 

Удалите кавычки вокруг переменной. Таким образом, это будет рассматриваться как переменная, а не как строка.

Или

$("#redundant_text_wrapper").text($("#redundant_text_wrapper").text().replace(redundantText,'')); 

Таким образом, он будет первым получить текст, чем заменить его и установить его.

+0

, что было ошибкой в ​​моем посте, у меня было это. Не работает :( –

+0

Вы тоже пробовали это с помощью 'html()' вместо 'text()' .Как 'html()' также получит html-теги 'a href' – SuperDJ

+0

, да, я пробовал. Не работает :( –

3

Это должно быть:

$("#redundant_text_wrapper").text($("#redundant_text_wrapper").text().replace('redundantText','')) ; 

Или, если вы хотите заменить все вхождения:

$("#redundant_text_wrapper").text($("#redundant_text_wrapper").text().replace(/redundantText/g,'')) ; 
1

$("#redundant_text_wrapper").text().replace('redundantText','') просто получает текстовое значение, заменяет его и ничего не делает с результатом, так что эта линия иронически избыточно.

Также как ваш redundantText содержит html, вероятно, вы должны использовать html() вместо text().

Если вы хотите манипулировать существующим html элемента, вы должны использовать перегрузку html() which takes a function (есть также same available for text()). Это получает текущий HTML элемента и возвращает новый HTML для установки:

$("#redundant_text_wrapper").html(function(index, oldHtml) { 
    return oldHtml.replace(redundantText,''); 
}); 

говорит все, что, заменяя все содержимое обертки менее эффективна и может привести к поломке вещей, как существующие обработчики событий на элементах внутри него.Я бы сказал, что предпочтительнее поставить избыточный текст в другой элемент, такой как <span>, а также добавлять и удалять, что вместо (или просто показать и скрыть его):

// wrap it all in a <span> - give it a class to be sure 
var redundantText = '<span class="redundant">text text text <a href=\"#contact\">Contact Me</a> text text text</span>'; 

$('#collapse_1').on('show.bs.collapse', function() { 
    $(".dropdown_collapse_1").addClass("dropdown-indicator"); 
    $(".dropdown_collapse_1").removeClass("dropdown-collapsed"); 
    $("#redundant_text_wrapper").append(redundantText); 
}); 

$('#collapse_1').on('hide.bs.collapse', function() { 
    $(".dropdown_collapse_1").addClass("dropdown-collapsed"); 
    $(".dropdown_collapse_1").removeClass("dropdown-indicator"); 
    // just find the span and remove it 
    $("#redundant_text_wrapper > span.redundant").remove(); 
}); 
+0

Вы правы, хотя это было просто опечатка в моем посте. –

 Смежные вопросы

  • Нет связанных вопросов^_^