В ваших функциях this
относится к элементу, к которому вы привязали функцию.
Вот демонстрация:
$("video").attr("poster", function() {
console.log("This refers to: " + this);
console.log(this);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<video></video>
Но похоже, что вы хотите получить атрибут id
из содержащего <div>
для каждого сообщения.
Я предлагаю вам назначить каждому сообщению <div>
класс «post».
Затем вы можете выбрать нужный пост из своих функций, используя jQuery's closest()
.
<div class="post" ... >
Я рекомендую использовать атрибут данных , такой как data-id
, а не id
,
, поскольку атрибут id
имеет свой собственный специального назначения .
<div class="post" data-id="1/1/8/2/1/4/4/5c5417cfefafd-677" ... >
Я рекомендую удалить элементы <a>
и привязать обработчик click
непосредственно к элементам .thumb
.Таким образом, вы упрощаете структуру HTML и вам не нужны встроенные атрибуты onclick=""
.
Вот рабочий пример:
$("video").attr({
'poster': function() {
var id = $(this).closest('.post').data('id');
return "https://WebSite" + id + "-.jpg";
},
'src': function() {
var id = $(this).closest('.post').data('id');
return "https://WebSite" + id + "-preview.mp4";
}
});
$(".thumb").on('click', function(e) {
e.preventDefault();
var id = $(this).closest('.post').data('id');
changeVideo(id);
});
function changeVideo(id) {
console.log('Changing Video: ' + id);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2>first post</h2>
<div class="post" title="First Post" data-id="1/1/8/2/1/4/4/5c5417cfefafd-677">
<div class="thumb">
<video muted poster="" onmouseover="this.play()" onmouseout="this.pause()">
Your browser does not support HTML5 video.
</video>
</div>
</div>
<h2>second post</h2>
<div class="post" title="Second Post" data-id="a-different-video-id">
<div class="thumb">
<video muted poster="" onmouseover="this.play()" onmouseout="this.pause()">
Your browser does not support HTML5 video.
</video>
</div>
</div>
В результате получается такая структура:
<div class="post" title="First Post" data-id="1/1/8/2/1/4/4/5c5417cfefafd-677">
<div class="thumb">
<video muted="" poster="https://WebSite1/1/8/2/1/4/4/5c5417cfefafd-677-.jpg" onmouseover="this.play()" onmouseout="this.pause()" src="https://WebSite1/1/8/2/1/4/4/5c5417cfefafd-677-preview.mp4">
Your browser does not support HTML5 video.
</video>
</div>
</div>
И jQuery привязал обработчик click
к каждому .thumb
,который передаст соответствующий data-id
в функцию changeVideo()
.