Змінити вміст div - jQuery


89

Як можна змінити вміст цього div, коли клацне одне з ПОСИЛАНЬ?

<div align="center" id="content-container">
    <a href="#" class="click cgreen">Main Balance</a>
    <a href="#" class="click cgreen">PayPal</a>
    <a href="#" class="click cgreen">AlertPay</a>
</div>

аналогічне питання для позначення: stackoverflow.com/questions/1309452 / ...
Gurjot Каур

Відповіді:


156

Ви можете передплатити подію .click для посилань та змінити вміст div, використовуючи .htmlметод:

$('.click').click(function() {
    // get the contents of the link that was clicked
    var linkText = $(this).text();

    // replace the contents of the div with the link text
    $('#content-container').html(linkText);

    // cancel the default action of the link by returning false
    return false;
});

Однак зауважте, що якщо ви заміните вміст цього div, призначений вами обробник кліків буде знищений. Якщо ви збираєтеся вводити деякі нові елементи DOM всередині div, до яких вам потрібно приєднати обробники подій, ці вкладення слід виконувати всередині обробника .click після вставлення нового вмісту. Якщо оригінальний селектор події збережено, ви також можете поглянути на .delegateспосіб приєднання обробника.


1
Як я можу потім завантажити вміст з ІНШОГО div, на тій самій сторінці, в # content-container?
Олівер 'Олі' Йенсен,

2
@Oliver 'Oli' Jensen, ось так:$('#content-container').html($('#someOtherDivId').html());
Дарін Димитров

слава Богу! Я зрозумів, що #div не може змінити .val (); Натомість ми повинні використовувати .html (); функції для того, щоб це працювало! : D @cuSK дякую
gumuruh 02

жива заставка @DarinDimitrov
excitedmicrobe

14

Тут ви хочете використовувати 2 функції jQuery.

1) click. Це буде приймати анонімну функцію як єдиний параметр і виконуватиме її при натисканні на елемент.

2) html. Це прийме html-рядок як єдиний параметр і замінить вміст вашого елемента на вказаний html.

Отже, у вашому випадку ви захочете зробити наступне:

$('#content-container a').click(function(e){
    $(this).parent().html('<a href="#">I\'m a new link</a>');
    e.preventDefault();
});

Якщо ви хочете лише додати вміст до свого div, а не замінювати все в ньому, вам слід використовувати append:

$('#content-container a').click(function(e){
    $(this).parent().append('<a href="#">I\'m a new link</a>');
    e.preventDefault();
});

Якщо ви хочете, щоб нові додані посилання також додавали новий вміст при натисканні, вам слід використовувати делегування подій :

$('#content-container').on('click', 'a', function(e){
    $(this).parent().append('<a href="#">I\'m a new link</a>');
    e.preventDefault();
});


2

Ви можете спробувати те ж саме з replacewith ()

$('.click').click(function() {
    // get the contents of the link that was clicked
    var linkText = $(this).text();

    // replace the contents of the div with the link text
    $('#content-container').replaceWith(linkText);

    // cancel the default action of the link by returning false
    return false;
});

.replaceWith()Метод видаляє вміст з DOM і вставки нового контенту на своєму місці за допомогою одного виклику.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.