Kei05
@Kei05

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

HTMLElementを判定したい

Q&A

Closed

Stringでid属性を指定した場合はdocument.getElementById()を挟み、
HTMLElementの場合はそのまま使用し、
それ以外の場合は処理をスキップしたいです。

HTMLElementはどのようにして条件式を書けばよいのでしょうか。
jQueryは使用せずに記述したいです。

追記1

以下で試してみましたが、HTMLElementとしては処理できませんでした。
button要素にonclick="toggleAria(this)"と入れてHTMLElementを取れるようにしています。
使い所によってはthisではなくidを指定することがあるので分岐したかったのですが、この原因がわからない状態です。

const toggleAria = target => {
  try {
    let targetElement;
    console.log(target);
    console.log(typeof target);
    if (targetElement instanceof HTMLElement) {
      targetElement = target;
    } else if (typeof targetElement === 'string') {
      targetElement = document.getElementById(target);
    } else {
      throw '型が一致しません。';
    }
    省略
  } catch (error) {
    console.warn(error);
  }
};

image.png

0

2Answer

instanceoftypeof使えばいけるんじゃないかな(開発ツールで、このページに対して実験してみた感触として)

function fn(x) {
    if (x instanceof HTMLElement) {
       // elementとして処理
    }
    else if (typeof x === "string") {
       // idとして処理
    }
}

2Like

Comments

  1. @Kei05

    Questioner

    ありがとうございます!
    試したところ例外となってしまったので、追記した箇所(追記1)をご確認いただけますでしょうか。。。
JavaScript
const toggleAria = target => {
  try {
    let targetElement;
-   if (targetElement instanceof HTMLElement) {
+   if (target instanceof HTMLElement) {
      targetElement = target;
    }

ただの凡ミスです.targetElementにはまだ何も入っていません.

ちなみに必要であればHTMLButtonElement等特定も可能です.

1Like

Comments

  1. @Kei05

    Questioner

    ご指摘いただきありがとうございます。
    条件に指定していた変数を修正したところ問題なく実装できました。

Your answer might help someone💌