Переместить имя класса от ребенка к родителю
Нужно переместить имя класса изображения в содержащий его элемент figure, используя jQuery...
<figure class="wp-caption">
<img class="imghvr-hinge-up" src="image.jpg">
<figcaption >A sample caption</figcaption>
</figure>
В частности, я хотел бы переместить любое имя класса тега img, начинающееся с 'imghvr-', на его содержащее число, если это содержащее число имеет имя класса 'wp-caption'. Результат будет выглядеть следующим образом...
<figure class="wp-caption imghvr-hinge-up">
<img class="" src="image.jpg">
<figcaption >A sample caption</figcaption>
</figure>
Надеюсь, что это имеет смысл!) Любая помощь будет принята с благодарностью!
4 ответа
Решение
Вы могли бы сделать это так
$('img[class^="imghvr-"]').each(function() {
var cl = $(this).attr('class');
$(this).removeClass().parent('[class="wp-caption"]').addClass(cl);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<figure class="wp-caption">
<img class="imghvr-hinge-up" src="image.jpg">
<figcaption>A sample caption</figcaption>
</figure>
$( 'img[class^="imghvr-"]' ).each( function() {
var imghvrClass = $(this).attr('class').match(/imghvr-.*/)[0]
var $parent = $(this).parent()
if ( $parent.hasClass( 'wp-caption' ) ) {
$(this).removeClass( imghvrClass )
$parent.addClass( imghvrClass )
}
})
<figure class="wp-caption">
<img class="imghvr-hinge-up" src="image.jpg">
<figcaption >A sample caption</figcaption>
</figure>
<figure class="wp-caption">
<img class="imghvr-hinge-up2" src="image.jpg">
<figcaption >A sample caption</figcaption>
</figure>
var imgs = document.querySelectorAll(".wp-caption img");
for(var i=0; i<imgs.length; i++) {
var img = imgs[i];
if(img.className.startWith("imghvr-")) {
img.parentChild.classList.push(img.className);
img.className = '';
}
}
Что-то вроде того. Я не проверял.
Редактировать: как всегда есть умнее меня ^^
Вы можете использовать .closest()
, .addClass(function(){})
, .is()
var c = "[class^=imghvr-]";
$("img" + c)
.closest("figure")
.addClass(function() {
if ($(this).is(".wp-caption")) {
var img = $(c, this);
var imgClass = img[0].className;
img[0].className = "";
return imgClass;
}
})
img[class^="imghvr-"] {
border: 1px solid blue;
}
figure[class*="imghvr-"] {
border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<figure class="wp-caption">
<img class="imghvr-hinge-up" src="image.jpg">
<figcaption>A sample caption</figcaption>
</figure>
<figure class="wp-caption">
<img class="imghvr-hinge-up" src="image.jpg">
<figcaption>A sample caption</figcaption>
</figure>
<figure class="wp">
<img class="imghvr-hinge-up" src="image.jpg">
<figcaption>A sample caption</figcaption>
</figure>
В качестве альтернативы, используя .toggleClass()
, .is()
, .find()
, .attr()
var c = "[class^=imghvr-]";
$("figure.wp-caption").toggleClass(function() {
var img = $("img", this);
return img.is(c) ? img.attr("class") : false
}).find(c).attr("class", "");
img[class^="imghvr-"] {
border: 1px solid blue;
}
figure[class*="imghvr-"] {
border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<figure class="wp-caption">
<img class="imghvr-hinge-up" src="image.jpg">
<figcaption>A sample caption</figcaption>
</figure>
<figure class="wp-caption">
<img class="imghvr-hinge-up" src="image.jpg">
<figcaption>A sample caption</figcaption>
</figure>
<figure class="wp">
<img class="imghvr-hinge-up" src="image.jpg">
<figcaption>A sample caption</figcaption>
</figure>