I think I have found where the problem is.
components\com_virtuemart\assets\js\dynupdate.js
So when the wanted 'div.product-container productdetails-view productdetails' is not a descendant in the response (like in my case), a 'find()' function, according to its definition:
Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
bypasses this div.Searching through the respose further '
find()' finds the desired '
div.product-container' but it's the one that belongs to '
div.product-related-products'.
Consequently - we have only that related product visible on the website - like in my case.
Solution for me is:Virtuemart.updateContent = function(url, callback) {
if(Virtuemart.isUpdatingContent) return false;
Virtuemart.isUpdatingContent = true;
urlSuf='tmpl=component&format=html&dynamic=1';
var glue = '&';
if(url.indexOf('&') == -1 && url.indexOf('?') == -1){
glue = '?';
}
url += glue+urlSuf;
$(this).vm2front("startVmLoading");
$.ajax({
url: url,
dataType: 'html',
success: function(data) {
var title = $(data).filter('title').text();
$('title').text(title);
- var el = $(data).find(Virtuemart.containerSelector);
+ var el = $(data).filter(Virtuemart.containerSelector);
- if (! el.length)
- el = $(data).filter(Virtuemart.containerSelector);
+ if (! el.length)
+ el = $(data).find(Virtuemart.containerSelector);
The only question that had left is:Why does the reposnse differ in the way the '
div.product-container productdetails-view productdetails' is placed on the code from website to website. That on my site it's a parent and, for example in the VM demo site, it's nested in the 'div.main'. Is it a template layout that tinkers with that...

Although as I wrote ealier
A template's fault? Rather no.. - checked with PROTOSTAR - the same problem.