Попытка обрезать строку после того, как она вызвана l oop через ajax - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть таблица с именами, фамилия каждой записи должна быть усечена, например. Майлз Дэвис становится Майлсом Д.

Я добиваюсь этого с помощью следующего JS:

$('.trunc-name').each(function (d, td) {
    $(td).text($(td).text().replace(/^(\S+)\s+(\S).*/, '$1 $2.'));
});

, а класс td установлен на trunc-name:

<td class="trunc-name"><?php foreach ($resident_name_terms as $object) { echo $object->name; } ?></td>

Содержимое таблицы (которое на самом деле является терминами таксономии WP) фильтруется через форму выбора - опции которой тоже усекаются.

Выбор:

if( $terms = get_terms( array(
    'taxonomy' => 'resident_name',
    'orderby' => 'name'
     ) ) ) :
     echo '<select name="resident_name_filter"><option value="" selected="selected">' . __( 'All Residents', 'mv' ) . '</option>';
     foreach ( $terms as $term ) :
         echo '<option class="trunc-name" value="' . $term->term_id . '">' . $term->name . '</option>'; 
     endforeach;
     echo '</select>';
endif;

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

Параметры запроса:

$relation = 'AND';
$params = array();
$args['tax_query']['relation'] = $relation;

foreach ( $taxonomies as $tax ) {
    if( isset( $_POST[ $tax . '_filter' ] ) && !empty( $_POST[ $tax . '_filter' ] ) ) {
        $args['tax_query'][] = array(
            'taxonomy' => $tax,
            'field' => 'id',
            'terms' => $_POST[ $tax . '_filter' ],
        );
    }
};

L oop:

$query = new WP_Query( $args );
if( $query->have_posts() ) : ?>
    <table style="width:100%" id="incident-reports">
        <tr>
            <th>Resident</th>
        </tr>

        <?php
            while( $query->have_posts() ): $query->the_post();
                $resident_name_terms = get_the_terms( $post->ID, 'resident_name' );
        ?>

        <tr>
            <td class="trunc-name"><?php foreach ($resident_name_terms as $object) { echo $object->name; } ?></td>
        </tr>
        <?php endwhile; ?>
    </table>
endif;

Любая помощь, как всегда, высоко ценится!

1 Ответ

0 голосов
/ 01 апреля 2020

Вам нужно запустить усеченный код в функции success: после того, как он создаст новые элементы.

$.ajax({
    ...
    success: function(response) {
        ... // code that adds the new HTML
        $('.trunc-name').each(function (d, td) {
            $(td).text($(td).text().replace(/^(\S+)\s+(\S).*/, '$1 $2.'));
        });
    }
});
...