【问题标题】:Making a div clickable and follow child anchor element使 div 可点击并跟随子锚元素
【发布时间】:2018-02-01 03:44:35
【问题描述】:

我目前正在制作一个可点击的 div,当点击它时,它必须跟随一个链接。这是我的 HTML:

<div class="product">
	<form method="post" action="/shop/basket.asp" name="myform260020" id="productlistBuyForm750" onsubmit="return BuyProduct(this,'1','0','False');">
		<div class="image">
			<a href="/shop/boa-elektrisk-luftpumpe-750p.html" title="Boa elektrisk luftpumpe"></a>
		</div>
		<div class="prodinfo">
			/* Lots of text here */
			<div class="listprodbuy">
				<input class="BuyButton_ProductList" style="border:solid 0px black" src="/images/skins/Nordic%20Spring/images/add_basket.png" type="IMAGE"><br>
				<input name="AMOUNT" size="3" maxlength="6" class="TextInputField_Productlist TextInputField_ProductList BuyButton_ProductList" value="1" type="TEXT">
			</div>
		</div>
	</form>
</div>

这个想法是,当我单击类“产品”的 div 元素时,它将跟随包含在类“图像”的 div 中的链接。但是,当单击“listprodbuy”类的 div 时,它不会跟随该链接。 到目前为止,这是我的 Jquery:

$(".product").click(function(){
  window.location = $(this).find("a").attr("href"); 
  return false;
});
$("div.listprodbuy").click(function(e){
  e.stopPropagation();
});

单击主 div 时,绝对没有任何反应,我认为这是因为 Jquery 无法准确定位链接,因为它不是 div 的直接子元素。我将如何准确指定它应该遵循哪个元素?

虽然我很想将整个 div 包装在一个锚点中,但这是不可能的,因为我的 CMS (DanDomain) 不允许我访问和编辑上面的 HTML。

Jsfiddle

【问题讨论】:

  • 如果可以的话,我会这样做。唯一的问题是我的 CMS (DanDomain) 是一个非常封闭的系统,其中有一些无法访问的标准模板,上面的 HTML 就是这些模板之一。我编辑的唯一方法是通过 css 和 Jquery
  • 删除 .div 并离开 $(".listprodbuy").click(function(e){ e.stopPropagation(); });
  • @Jacob 我猜你忘了在 HTML 中添加 jQuery。这是相同的工作演示s.codepen.io/madhurgarg71/debug/vJrWVM/mWkoNbwJvZwA
  • 非常感谢,谢谢。此脚本是否适用于其中几个具有不同链接的 div?它们都有相同的布局。

标签: javascript jquery html anchor stoppropagation


【解决方案1】:

window.location 应该设置为绝对路径而不是相对路径。由于您发现锚标记的 href 为$(this).find("a").attr("href"),因此它将为您提供相对路径。只需将 html 从 &lt;a href="/shop/boa-elektrisk-luftpumpe-750p.html" title="Boa elektrisk luftpumpe"&gt;&lt;/a&gt; 更改为 &lt;a href="./shop/boa-elektrisk-luftpumpe-750p.html" title="Boa elektrisk luftpumpe"&gt;&lt;/a&gt; 即可获得绝对路径。

使用e.preventDefault();e.stopPropagation(); 来避免回发。

完整代码:

$(".product").click(function(){
  window.location = $(this).find("a").attr("href"); 
  return false;
});
$("div.listprodbuy").click(function(e){
  e.preventDefault();
  e.stopPropagation();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="product">
			<form method="post" action="/shop/basket.asp" name="myform260020" id="productlistBuyForm750" onsubmit="return BuyProduct(this,'1','0','False');">
				<div class="image">
					<a href="./shop/boa-elektrisk-luftpumpe-750p.html" title="Boa elektrisk luftpumpe"></a>
				</div>
				<div class="prodinfo">
					/* Lots of text here */
					<div class="listprodbuy">
						<input class="BuyButton_ProductList" style="border:solid 0px black" src="/images/skins/Nordic%20Spring/images/add_basket.png" type="IMAGE"><br>
						<input name="AMOUNT" size="3" maxlength="6" class="TextInputField_Productlist TextInputField_ProductList BuyButton_ProductList" value="1" type="TEXT">
					</div>
				</div>
			</form>
		</div>

【讨论】:

  • 谢谢!这在我的 JSFiddle 中有效!但是有一个问题,我无法按照您在我自己的网站上的建议编辑 href 并添加点,因为 HTML 是我无权编辑的标准布局的一部分(糟糕的 CMS)。是否也可以通过 Js 将相对链接转换为绝对链接?像 .attr("(我的网站在这里)+href"); ?如果那太远了,请原谅我,我对 jquery 的了解非常有限
  • 是的,您可以使用当前目录形成绝对路径并与 href 连接。要找到当前目录,请使用“window.location.pathname”。它将与文件一起提供路径。使用string的substring方法获取目录。
  • 使用这些行获取绝对路径。 var loc = window.location.pathname; var dir = loc.substring(0, loc.lastIndexOf('/')); var redirectTo = dir + $(this).find("a").attr("href");警报(重定向到);
猜你喜欢
  • 2023-02-13
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多