想象一下这个简单的html代码:
<section onclick="dosomething(event)">
<div slot="header" class="collapse-header">
<div class="collapse-image"></div>
<div class="collapse-text-price-container">
<div class="collapse-text">სასაჩუქრე ბარათი 200 ლარი – ტანსაცმლის მაღაზია ZURA & SHARK</div>
<div minprice="1200"></div>
</div>
<div class="center-item-container">
<div class="status success-status">წაღებული</div>
</div>
<div class="center-item-container">
<div class="date-text">10 იან, 2018</div>
</div>
<div class="center-item-container">
<iron-icon class="icon" icon="bog:chevron-down"></iron-icon>
</div>
</div>
<div slot="body" class="collapse-body">
<div>Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.</div>
</div>
</section>
请注意以下部分代码:onclick="dosomething(event)"
。如您所见,我在外部<section>
标记内还有许多其他元素。我也有很多类似的部分,在单击时,我想获得被单击的确切部分元素,我该怎么做? event.srcElement
有时会在此部分中返回元素,而不是该部分本身。那么解决方案是什么?
我当前的解决方案(我不喜欢)是我从path
获得了属性composedPath
或event
,它是元素数组,然后遍历直到找到标签名称为section
的元素。
答案 0 :(得分:4)
您可以使用event.target
并从事件中传递this
来获取源元素:
function dosomething(event, source) {
console.log(source.tagName);
event.target.classList.add('red');
}
.red {
color: red;
}
<section onclick="dosomething(event, this)">
<div slot="header" class="collapse-header">
<div class="collapse-image"></div>
<div class="collapse-text-price-container">
<div class="collapse-text">სასაჩუქრე ბარათი 200 ლარი – ტანსაცმლის მაღაზია ZURA & SHARK</div>
<div minprice="1200"></div>
</div>
<div class="center-item-container">
<div class="status success-status">წაღებული</div>
</div>
<div class="center-item-container">
<div class="date-text">10 იან, 2018</div>
</div>
<div class="center-item-container">
<iron-icon class="icon" icon="bog:chevron-down"></iron-icon>
</div>
</div>
<div slot="body" class="collapse-body">
<div>Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.</div>
</div>
</section>
答案 1 :(得分:4)
尝试像这样更改函数调用行:
<section onclick="dosomething(this, event)">
然后运行:
function dosomething(me, e) {
console.log(me); // returns the section, which was clicked
console.log(e.target); // returns the element, which was clicked
}
答案 2 :(得分:2)
您可以使用event.target
function dosomething(event) {
console.log(event.target)
}
<section onclick="dosomething(event)">
<div slot="header" class="collapse-header">
<div class="collapse-image"></div>
<div class="collapse-text-price-container">
<div class="collapse-text">სასაჩუქრე ბარათი 200 ლარი – ტანსაცმლის მაღაზია ZURA & SHARK</div>
<div minprice="1200"></div>
</div>
<div class="center-item-container">
<div class="status success-status">წაღებული</div>
</div>
<div class="center-item-container">
<div class="date-text">10 იან, 2018</div>
</div>
<div class="center-item-container">
<iron-icon class="icon" icon="bog:chevron-down"></iron-icon>
</div>
</div>
<div slot="body" class="collapse-body">
<div>Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.</div>
</div>
</section>
或者,如果您只想获取源代码部分,则只需将this
传递给该函数。
function dosomething(section) {
console.log(section)
}
<section onclick="dosomething(this)">
<div slot="header" class="collapse-header">
<div class="collapse-image"></div>
<div class="collapse-text-price-container">
<div class="collapse-text">სასაჩუქრე ბარათი 200 ლარი – ტანსაცმლის მაღაზია ZURA & SHARK</div>
<div minprice="1200"></div>
</div>
<div class="center-item-container">
<div class="status success-status">წაღებული</div>
</div>
<div class="center-item-container">
<div class="date-text">10 იან, 2018</div>
</div>
<div class="center-item-container">
<iron-icon class="icon" icon="bog:chevron-down"></iron-icon>
</div>
</div>
<div slot="body" class="collapse-body">
<div>Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.</div>
</div>
</section>
答案 3 :(得分:1)
您可以使用this作为参数,并且可以使用“ this”获取所有子元素。 例如 更改以下html文本: 至
在javascript中,您可以这样做:
function dosomething(event,this)
{
var _this = this; // get section element
var _elem = event.target // get self element
var childElements = _this.childNodes; //get child elements
/* if you are using jQuery do like this */
var xxxElem = $(_this).find(".xxx");
}
答案 4 :(得分:-1)
您可以检查类或单击它的任何特定属性
function (event){
const ele = event.target; }