2015-10-22 3 views
1

Ошибка при добавлении значения элемента 'p' к обоим блокам 'review-comment-wrap'. Я думаю, что проблема может заключаться в том, что в моей функции append элемент «p» добавляется ко всем элементам отзыва-комментария-комментария. Как добавить только к блоку 'review-comment-wrap', где элемент со значением B был удален?Добавить элемент к одному элементу массива

<div class="reviewer-meta"> 
    <div class="author-attribute">Value A</div> 
    <div class="author-attribute">Value B</div> 
</div> 

<div class="review-comment-wrap">some value</div> 
/** add appended value here only **/ 

<div class="reviewer-meta"> 
    <div class="author-attribute">Value A</div> 
</div> 

<div class="review-comment-wrap">some value</div> 


function runProgram(){ 
    var theElements = $('.reviewer-meta').find('.author-attribute'); 

    $(theElements).each(function(){ 
     if(this.innerHTML == "Value B"){ 
      $(this).remove(); 
     } 
    }); 
    $('.review-comment-wrap').append('<p>New value</p>'); 
} 
runProgram(); 

ответ

1

Чтобы получить элемент «отзыв-комментарий-обертку», то есть следующие на рецензент-мете, где ваши результаты проверки правда, что вы можете использовать «следующую()» функцию, применяемую в родительском элементе.

function runProgram(){ 
var theElements = $('.reviewer-meta').find('.author-attribute'); 

$(theElements).each(function(){ 
    if(this.innerHTML == "Value B"){ 
     $(this).parent().next('.review-comment-wrap').append('<p>New value</p>'); 
    $(this).remove(); 
} 
}); 

} 
runProgram(); 

Дополнительная информация: https://api.jquery.com/next/

+0

Спасибо за вашу помощь. Братья и сестры - хороший подход – Jgunzblazin

+0

Добро пожаловать. – cesare

+0

Что вы предлагаете, если «рецензент-комментарий-обертка» жил вне блока «рецензент-мета»? – Jgunzblazin

1

Вы должны переместить Append в if заявление и обратиться к этой группе элементов.

function runProgram(){ 
    var theElements = $('.reviewer-meta').find('.author-attribute'); 

    $(theElements).each(function(){ 
     if(this.innerHTML == "Value B"){ 
      $(this).siblings('.review-comment-wrap').append('<p>New value</p>'); 
      $(this).remove(); 
     } 
    }); 
} 

http://jsfiddle.net/daCrosby/a0orn0q7/

Если вы хотите, чтобы упростить немного больше, вы можете использовать функции filter, а также. Это позволяет пропустить цикл и если утверждения полностью.

function runProgram(){ 
    var element = $('.reviewer-meta').find('.author-attribute') 
        .filter(function(){ return $(this).text() == "Value B"; }); 

    element.siblings('.review-comment-wrap').append('<p>New value</p>'); 
    element.remove(); 
} 
runProgram(); 

http://jsfiddle.net/daCrosby/a0orn0q7/1/

+0

Спасибо DACrosby, в моей разметке выше - у меня есть 'review-comment-wrap' внутри блока 'reviewer-meta'. Я на самом деле хотел, чтобы он находился за пределами квартала. Что бы вы предложили, если бы он не был братом «рецензента-мета»? Я новичок в stackoverlfow - вы бы порекомендовали мне изменить мою разметку выше? – Jgunzblazin

+1

Если ваша разметка отличается, да, я бы рекомендовал обновить ее правильно. Кроме того, может быть показано в коде, где вы хотите, чтобы добавленный элемент прошел точно. – DACrosby

0

Я согласен, что это действительно нужно идти внутри цикла, однако вам нужно дальше результаты Jquery оператор выбора.

Я хотел бы использовать что-то вроде

$(theElements).each(function(){ if(this.innerHTML == "Value B"){ $(this).parent().appaend('<p>New value</p>'); $(this).remove();
} });

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