ユーザーが必要なリンクタイプをクリックすると、クリックしたものに基づいて下の小さなテキストフィールドで開くスクリプトを作成しようとしています。
例えば
ユーザーが希望するリンクをクリックすると、クリック時にそのテキストフィールドが希望するように変更されるようなものを作成するにはどうすればよいですか?
ユーザーが必要なリンクタイプをクリックすると、クリックしたものに基づいて下の小さなテキストフィールドで開くスクリプトを作成しようとしています。
例えば
ユーザーが希望するリンクをクリックすると、クリック時にそのテキストフィールドが希望するように変更されるようなものを作成するにはどうすればよいですか?
次のマークアップスタイルを想定しています。
<ul>
<li><a class="linkInsert" href="http://www.example.com/article/">Link (email & blogs)</a></li>
</ul>
<input id="linkText" />
次に、プレーンJavaScriptを使用できます。
var links = document.getElementsByTagName('a'),
textInput = document.getElementById('linkText'),
linkInserts = [];
for (var i = 0, len = links.length; i < len; i++) {
if (links[i].className == 'linkInsert') {
linkInserts.push(links[i]);
}
}
for (var i = 0, len = linkInserts.length; i < len; i++) {
linkInserts[i].onclick = function(e) {
e.preventDefault();
textInput.value = this.parentNode.innerHTML;
};
}
または、jQueryを使用する場合:
$('a.linkInsert').click(
function(e){
e.preventDefault();
$('#linkText').val($(this).parent().html());
});
貼り付けたHTMLの冗長な属性を回避し、それらをフィルターで除外する必要があるため、上記のHTMLを次のように変更しました。これで、親li
要素をターゲットにします。
<ul>
<li class="linkInsert"><a href="http://www.example.com/article/">Link (email & blogs)</a></li>
</ul>
<input id="linkText" />
jQuery:
$('li.linkInsert a').click(
function(e){
e.preventDefault();
$('#linkText').val($(this).parent().html());
});
そして、修正されたHTMLを使用するように更新されたプレーンJavaScriptバージョン:
var listElems = document.getElementsByTagName('li'),
textInput = document.getElementById('linkText'),
linkInserts = [];
for (var i = 0, len = listElems.length; i < len; i++) {
if (listElems[i].className == 'linkInsert') {
linkInserts.push(listElems[0].getElementsByTagName('a')[0]);
}
}
for (var i = 0, len = linkInserts.length; i < len; i++) {
linkInserts[i].onclick = function(e) {
e.preventDefault();
textInput.value = this.parentNode.innerHTML;
};
}
そして、もう少し最新のアプローチを使用して、addEventListener()
:
function showHTML(evt){
evt.preventDefault();
var textInput = document.getElementById('linkText'),
target = evt.target,
targetTag = target.tagName.toLowerCase();
if (targetTag == 'a'){
textInput.value = target.parentNode.innerHTML;
}
else if (targetTag == 'li'){
textInput.value = target.innerHTML;
}
}
document
.getElementsByTagName('ul')[0]
.addEventListener('click',function(evt) { showHTML(evt) },false);
そして最後に、互換性があると思われるバージョン古代の「レガシー」InternetExplorer(IE 8、WinXPおよびIE 9、Win7でテスト済み):
function showHTML(evt) {
var evt = evt || event;
if (evt.preventDefault){
evt.preventDefault();
}
else {
event.returnValue = false;
}
var textInput = document.getElementById('linkText'),
target = evt.target ? evt.target : evt.srcElement,
targetTag = target.tagName.toLowerCase();
if (targetTag == 'a') {
textInput.value = target.parentNode.innerHTML;
}
else if (targetTag == 'li') {
textInput.value = target.innerHTML;
}
}
if (window.addEventListener) {
document.getElementsByTagName('ul')[0].addEventListener('click', function(evt) {
showHTML(evt)
}, false);
}
else if (window.attachEvent) {
document.getElementsByTagName('ul')[0].attachEvent('onclick', showHTML);
}
参照:
リンクがどこにも行かないようにします。たとえば、#、ID を与える、jquery でクリックを聞く、または onclick html 属性を使用し、領域を選択し、クリックされたリンク テキストを設定します :-)